在应用程序启动时,应用程序启动应该执行某些网络任务的服务.在针对API级别26后,我的应用程序无法在后台启动Android 8.0上的服务.
引起:java.lang.IllegalStateException:不允许启动服务Intent {cmp = my.app.tt/com.my.service}:app在后台uid UidRecord {90372b1 u0a136 CEM空闲过程:1 seq(0,0) ,0)}
据我所知,它涉及: 后台执行限制
如果针对Android 8.0的应用程序在不允许创建后台服务的情况下尝试使用该方法,则startService()方法现在会抛出IllegalStateException.
" 在不允许的情况下 " - 它实际意味着什么?以及如何解决它.我不想把我的服务设置为"前景"
一些三星设备具有超省电模式,可关闭wifi,转动屏幕灰度并限制几个基本应用的使用.
但它确实允许您添加一些可以使用的应用程序.这些应用包括Facebook和WhatsApp.如何让我的应用程序出现在此列表中?我必须对应用程序进行哪些更改才能显示在此列表中?或者此列表是否基于三星维护的白名单?
根据Android Marshmallow文档,当系统处于打盹模式时,任何唤醒锁被忽略.然而,我不清楚唤醒锁是否会阻止打盹模式.
打瞌睡时是否可以使用网络访问?如果我的应用程序忽略电池优化不会进入待机状态,但无论如何都会受到打瞌睡的影响.我错过了什么吗?
我正在研究Android上的传统VOIP应用程序.它现在不使用Google Cloud Messaging技术,而是永远保持自己的TCP连接.
最近谷歌推出了带有Doze模式的 Android M预览版
所以问题是:在没有重新设计整个系统以使用GCM的情况下,应用程序如何在打盹模式下接收传入呼叫/消息是否有任何解决方法?
android push-notification android-networking google-cloud-messaging android-6.0-marshmallow
我正在开发一个应用程序,如果靠近某个地方,应该提醒用户.当然,如果手机处于闲置状态,也必须这样做.有了DOZE,我现在明白我必须将我的应用程序列入白名单,为此,我看到我可以通过动作请求启动一个意图,感谢Buddy在这篇文章中的回答
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName))
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
好吧这应该太容易了...因为谷歌不喜欢这种方法,如果你这样做,你的应用程序应该被禁止从游戏商店...没有评论...好的方式应该是驱动用户电池设置,并在DOZE的白名单中手动添加您的应用程序...是的,这应该是一个很大的攀爬墙...反正似乎是唯一的方式...现在答案是:我可以使用意图以这种方式转到电源使用情况摘要(谢谢Chris):
Intent powerUsageIntent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
ResolveInfo resolveInfo = getPackageManager().resolveActivity(powerUsageIntent, 0);
// check that the Battery app exists on this device
if(resolveInfo != null){
startActivity(powerUsageIntent);
}
Run Code Online (Sandbox Code Playgroud)
但是如何直接进入应用程序列表来选择电池优化?
谢谢你的回答.
我开发了一个应用程序来与具有以下架构的物联网设备进行通信:
IOT: Websocket 服务器,每 5 秒 ping 一次连接到它的所有设备。
Android 11 应用程序: 前台启动的服务,有一个在线程中运行的 websocket 客户端,并通过 WiFi 连接到 IOT。此应用程序的电池优化在 Android 设置中被禁用,因此它永远不会让应用程序进入睡眠状态。
如果我让应用程序保持打开状态并关闭屏幕,即使关闭手机屏幕,一切也能正常工作。但是当我关闭应用程序(并且前台服务仍在运行)然后关闭屏幕时,几乎一分钟后不再收到 ping,几分钟后 websocket 连接抛出异常并重新建立连接,在收到几个 ping 后进入地狱状态一次又一次:
2021-07-23 19:12:47.015 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:12:52.008 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:12:57.104 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:13:02.108 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:13:07.113 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:13:12.115 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:13:17.128 31236-8286/com.example.rfremote I/MESSAGE: ON PING RECEIVED
2021-07-23 19:13:22.148 31236-8286/com.example.rfremote I/MESSAGE: ON …Run Code Online (Sandbox Code Playgroud)