当前位置:  开发笔记 > Android > 正文

在Android 6.0上,Alarm Manager无法在后台运行

如何解决《在Android6.0上,AlarmManager无法在后台运行》经验,为你挑选了2个好方法。

这是我的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);

这些是我在我的应用中拥有的所有权限,

  
    
    
    
    
    
    
    

这是我的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();

    }

BroadcastReceiver在清单上注册了我的,

 
        
            
            
        
    

上面的代码BroadcastReceiver在后台成功执行了on MarshMallow设备,但是在MarshMallow设备上,BroadcastReceiver没有执行.有谁知道这里会发生什么?谢谢.



1> Y.S..:

您可以尝试一些事项,当一起使用时,应该能够切断所有空闲/待机/打盹模式(无论操作系统版本如何).

1. 使用WakefulBroadcastReceiver而不是普通的BroadcastReceiver.确保包含WAKE_LOCK正确使用它的权限.

2.使用该setExactAndAllowWhileIdle()方法(在API 23及更高版本上)Intent为接收者安排:

if(Build.VERSION.SDK_INT < 23){
    if(Build.VERSION.SDK_INT >= 19){
        setExact(...);
    }
    else{
        set(...);
    }
}
else{
    setExactAndAllowWhileIdle(...);
}

参考文献:

1. 后台服务的报警管理器.

2. 后台工作,闹钟和Android应用程序的流程图.



2> Shahzeb..:

原因可能是Android 6.0 Marshmallow中引入的Doze模式.使用setAlarmclock()而不是set().它专为闹钟而设计,可能能够通过打瞌睡.您可以使用一些adb命令手动将手机置于打盹或应用待机模式:

https://developer.android.com/preview/features/power-mgmt.html

如果那不能唤醒你的应用程序,那就是确保方法setExactAndAllowWhileIdle()用于将手机从打瞌睡中唤醒,无论如何.最糟糕的情况是,您可以使用此方法唤醒应用程序并使用唤醒来安排下一个警报.

参考: 如何在Doze模式下安装Android 6.0时使Alarm Manager工作?

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有