Articles of android o

Bitmap分配如何在Oreo上运行,以及如何调查它们的内存?

背景 在过去几年中,为了检查Android上的堆内存量以及使用量,您可以使用以下内容: @JvmStatic fun getHeapMemStats(context: Context): String { val runtime = Runtime.getRuntime() val maxMemInBytes = runtime.maxMemory() val availableMemInBytes = runtime.maxMemory() – (runtime.totalMemory() – runtime.freeMemory()) val usedMemInBytes = maxMemInBytes – availableMemInBytes val usedMemInPercentage = usedMemInBytes * 100 / maxMemInBytes return “used: ” + Formatter.formatShortFileSize(context, usedMemInBytes) + ” / ” + Formatter.formatShortFileSize(context, maxMemInBytes) + ” (” + […]

在Android studio中看不到“font”资源types

我正在浏览新的Android Ofunction,其中一个新function是现在app可以直接将字体添加到res文件夹中。 根据用于处理字体的android 文档 ,第一步之一是使用右键单击res文件夹创建名为“font”的新资源types,然后转到新建> Android资源目录。 但是我在android studio的下拉列表中看不到资源types的“font”选项。 下面是附图。 我无法在下拉列表中看到“font”选项,因此我无法创建字体android资源目录。 我的Android工作室详情: Android Studio 2.3 Build#AI-162.3764568,构建于2017年2月24日JRE:1.8.0_112-release-b06 x86_64 JVM:JetJrains sro的OpenJDK 64位服务器VM

必须声明元素自适应图标

我使用Android Studio 2.3.3稳定并尝试为Android O创建自适应图标 我创建了文件夹mipmap-anydpi-v26和文件ic_launcher.xml以及以下内容 但它说“元素自适应图标必须声明”。 目标SDK和构建工具都设置为26。 它构建成功,但我没有任何设备来测试它,所以我的问题是 – 它有效吗? PS:前景是有效的VectorDrawable

绑定服务崩溃与“Context.startForegroundService()然后没有调用Service.startForeground()”错误

我正在制作音频播放应用程序,我正在使用一个启动绑定服务在后台播放音乐。 我使用以下代码启动并绑定到服务。 val intent = Intent(context, MusicService::class.java) context.startService(intent) context.bindService(intent, serviceConnection, 0) 它在播放时被提升到前景,在音乐暂停时被降级。 // onAudioPlay service.startForeground(NOTIFY_ID, notification) // onAudioPause service.stopForeground(false) 到目前为止服务工作很好。 但是当用户在暂停状态下刷新(删除)通知时,服务会在几秒钟后崩溃,从而出现此错误。 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myplayer, PID: 4380 android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() android.app.ActivityThread$H.handleMessage(ActivityThread.java:1775) android.os.Handler.dispatchMessage(Handler.java:105) android.os.Looper.loop(Looper.java:164) android.app.ActivityThread.main(ActivityThread.java:6541) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 这只发生在奥利奥上,我已经读过奥利奥的背景限制。 但以下几点让我感到困惑。 此服务是绑定服务(不受限制) 我从不使用Context.startForegroundService()来启动服务。(并且不想使用它) 当服务从前台降级时,服务不会崩溃,在删除通知时会发生这种情况。 为什么服务崩溃了? 我究竟做错了什么? 如果有人告诉我这里发生了什么,我很感激。

Notification.Builder(context)已弃用Android O

Notification.Builder(context)最近因Android O中的Notification Channels场地而被弃用。 问题: 在使用Notification.Builder(context, StringID)而不是Notification.Builder(context)我收到了通知我的Android O设备。 但是,在Android 23(M)上尝试后,我没有收到通知。 我调试了我的代码,一旦调试器在Android 23(M)上点击Notification.Builder(context,StringID)后面的行就停止执行。 固定: 为解决此问题,我使用if / else条件在Android O设备和其他其他设备之间进行隔离。 我有以下代码片段: Notification.Builder notificationBuilder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { notificationBuilder = new Notification.Builder(mContext, mContext.getResources().getString(R.string.notification_id_channel)); } else { notificationBuilder = new Notification.Builder(mContext); } Android Studio中的Lint显示以下弃用行: 题: 有没有办法摆脱弃用警告线?

Android O Developer Preview模拟器始终处于脱机状态

我正在尝试针对Android O开发人员预览测试我的应用。 我可以下载并运行模拟器,但在部署我的应用程序时,它总是显示为“[OFFLINE]”。 如果我继续尝试部署,我得到以下输出: com.android.ddmlib.AdbCommandRejectedException: device unauthorized. This adb server’s $ADB_VENDOR_KEYS is not set Try ‘adb kill-server’ if that seems wrong. Otherwise check for a confirmation dialog on your device. Error while Installing APK 我已尝试按照上面的输出中的建议重新启动ADB。 此外,我从未在模拟器中获得确认对话框。 其他版本的仿真器。 例如。 Nougat 7.1工作正常。 我正在运行Android Studio 3.0 Canary 1(标准频道也不起作用)。

Android O – 单线通知 – 就像“Android系统 – USB充电此设备”

我想继续通知我的ForegroundService ,它需要尽可能小的地方。 我喜欢“Android系统 – USB充电这个设备”的风格,但我找不到任何如何实现这个的例子。 谁能指出我正确的方向? 更新 如果为通道分配了重要性IMPORTANCE_MIN则会为通知指定样式。 看起来没有办法使用内置样式的Androids来将IMPORTANCE_MIN通知与ForegroundService一起使用。 以下是IMPORTANCE_MIN的说明: 最小通知重要性:仅在阴影下方显示。 这不应该与Service.startForeground一起使用,因为前台服务应该是用户关心的东西,因此将其通知标记为最低重要性并不具有语义意义。 如果您从Android版本Build.VERSION_CODES.O开始执行此操作,系统将显示有关您的应用在后台运行的更高优先级通知。

Android vibrate已弃用。 如何在Android> = API 26中使用VibrationEffect?

我正在使用Android的VIBRATOR_SERVICE为按键触摸提供触觉反馈。 ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300); Android Studio告诉我警告方法vibrate(interval)已弃用我应该使用VibrationEffect for API> 23。 所以我使用了VibrationEffect的方法createOneShot ,它采用2个参数:间隔和幅度。 我试着寻找它,但不知道要传递什么作为amplitude ,任何人都知道如何使用它? 更新添加的代码 // Vibrate for 150 milliseconds private void shakeItBaby() { if (Build.VERSION.SDK_INT >= 26) { ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150,10)); } else { ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150); } }

Android支持库27,片段更新?

自从我将项目更新到SDK版本27并将支持库的gradle插件更新到版本27.0.0我需要更改我的代码。 使用26.1.0我可以在我的Fragment ( android.support.v4.app )中使用getContext() (使用Kotlin context )并且我没有可空性问题,但是因为我使用Kotlin我遇到了版本27.0.0的问题,我的所有context调用都不再起作用了,我需要一个安全操作符,就像context!!一样context!! ,但是因为我个人觉得每次我做自己的工作都是一种喧嚣 override fun getContext() = super.getContext()!! 改变的另一件事(突然,这就是我要问的原因)是onCreateView()和onViewCreated() 。 在onCreateView ,inflater不再是null,所以我需要更改我的函数签名以正确覆盖onCreateView(inflater: LayoutInflater?…)到onCreateView(inflater: LayoutInflater…)并且对于createdView参数也是createdView 。 onViewCreated 。 所以现在我想知道为什么,特别是(对于Kotlin)非常丑陋的getContext()更改已经完成并转向https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html 。 但等等,显然他们没有改变它? 所以现在我的问题是,如果我做错了什么或者他们是否真的改变了它,如果是这样,我可能会问他们为什么? 顺便说一句,同样适用于getActivity() ,我认为添加了mHost == null检查, getActivity方法甚至是最终的,所以我不能在那里使用我的解决方法,这使得它非常难看。 实际上在源文件中方法看起来是一样的,但是26.1.0有Kotlin返回typesContext! 和27.0.0返回typesContext? 。

在Android Oreo 8.x中更改WiFi热点的SSID和密码

在我的Android应用程序中,我使用以下代码片段: @RequiresApi(api = Build.VERSION_CODES.O) private void turnOnHotspot(){ WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); manager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback(){ @Override public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) { super.onStarted(reservation); Log.d(TAG, “Wifi Hotspot is on now”); } @Override public void onStopped() { super.onStopped(); Log.d(TAG, “onStopped: “); } @Override public void onFailed(int reason) { super.onFailed(reason); Log.d(TAG, “onFailed: “); } },new Handler()); } 这段代码创建了一个名为“AndroidShare_1234”的热点。 对于我的项目,我需要能够为此热点设置密码和SSID,但是我找不到这样做的方法。 我想创建一个像MyHotspot这样的SSID和自定义密码的热点。 […]