这个问题与Android 6.0 Preview 3有关,它将在本月底发布.
我在Nexus 5'hackhead'的谷歌预览版3中测试Android 6.0中的一些东西.
新功能是"打盹模式" - 类似于深度睡眠模式,当网络被禁用和手机休眠时,只有SMS,呼叫或高优先级GCM消息才能将其唤醒.但是像WhatsApp一样 - 在打盹模式下,它在2小时或更长时间后接收消息取决于计时器.但是有一个名为"白名单"的"未优化"应用列表,您可以手动添加应用.
好的,我想找到一种方法来以编程方式添加我的应用程序而无需用户交互到电池设置中设备中存在的"白名单应用列表".
试着用反射进入它我发现:
在android.os.IDeviceIdleController中有一个方法:
public abstract void addPowerSaveWhitelistApp(String packageNameOfApp)
但这是一个接口......所以我们不能创建一个接口实例.
目前还没有关于此接口或方法或任何继承树的文档.
也许你有一些想法我应该在哪里寻找以编程方式添加我的应用程序的可能性?
还有一种方法
public abstract boolean isPowerSaveWhitelistApp(String packageName)
我认为应该可以以某种方式访问?!检查应用程序是否存在于白名单中,也许最后希望ASK用户将其添加到白名单.
所以我的问题是,有没有人试图用更好的结果做出一些事情?因为我被困住了,我认为这是一个死胡同.
欲了解更多信息:https://newcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze
我有一个带有WiFi锁的Android前台服务,它充当另一个本地设备的Web服务.在打盹模式之前,获取WiFi锁并根据需要提供服务非常有效.
即使关闭了我的应用程序的电池优化功能,当屏幕关闭几分钟时,手机仍然会杀死应用程序.
如何正确警告Android明确地在前台执行客户请求的服务,并且他们此时不希望他们的手机进入睡眠状态?
编辑:这个问题仍然存在于Android 8.0(奥利奥)
这是我的Activity代码,
Long time = new GregorianCalendar().getTimeInMillis()+20000;//Setting alarm after 20 sec
Intent intentAlarm = new Intent("alarm");
intentAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentAlarm.putExtra("req_code",10);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,10, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
这些是我在我的应用中拥有的所有权限,
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.myapp.pack.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Run Code Online (Sandbox Code Playgroud)
这是我的BroadcastReceiver代码,
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences =
context.getSharedPreferences( "mydata", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("elligible",true);
editor.apply();
}
Run Code Online (Sandbox Code Playgroud)
我BroadcastReceiver在清单上注册了我的,
<receiver …Run Code Online (Sandbox Code Playgroud) android android-intent android-alarms android-broadcast android-broadcastreceiver
我正在开发一个android应用程序,其主要用途是在设定的时间显示通知(某些特定的日历应用程序).其中一个主要的抱怨是,用户不会(总是)接收通知,而我最终会陷入困境.
我们在仿真器上对Android 4.4,6,7.0,7.1,8.0,8.1进行了内部测试,并使用了大约10个真实设备(6到8.1),所有设备都按时收到了通知.即使在重新启动时,通知也都按时收到.
我们遇到的一件事是Samsung设备上的SecurityException(> 500个已注册的警报),我们之前因为无法取消而触发了这些警报.它看起来不再是一个问题.
那么,这些缺失通知的原因是什么?它是特定于设备的设置,它是一个简单的错误吗?或者还有其他因素在这里发挥作用?
这是我们使用的代码:
private void cancelAlarm(String notificationId, Class<? extends AbstractReceiver> receiverClass)
throws BroadcastException {
/*
* Create an intent that looks similar, to the one that was registered using add. Making sure the notification id in the action is the same. Now we can search for
* such an intent using the 'getService' method and cancel it.
*/
final Intent intent = new Intent(this.context, receiverClass);
intent.setAction(notificationId);
final PendingIntent pi = PendingIntent.getBroadcast(this.context, 0, …Run Code Online (Sandbox Code Playgroud)