我有一个旧的应用程序,其中每分钟使用AlarmManager
的{{1}}调用服务,但是在最新的 Android O 中,它不允许我以相同的方式运行服务。我无法使用前台服务,因为我不想在服务运行时显示任何通知。
我希望以某种方式来调整我的应用程序体系结构,以便我的代码可以在Android O中以最少的更改运行。
当我在Android中运行应用程序时,它是崩溃:(。请在下面找到崩溃的堆栈跟踪。
setExact
编辑:
我的应用程序中的任务是时间紧迫的,因此我在java.lang.RuntimeException: Unable to create application com.***.***.***ControllerApplication: java.lang.IllegalStateException: Not allowed to start service Intent
Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.***.***.qa/com.***.***.services.AlarmService
中使用了setExact
,但是当前受支持的API均未在确切的时间调度作业。话虽如此,如果我使用JobScheduler / WorkManager,则我的应用程序将发生故障。
答案 0 :(得分:-1)
您可以使用警报管理器,该警报管理器每10分钟就会调用一次
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;
Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
notificationIntent.setClass(this,AlarmReceiver_.class);
notificationIntent.addCategory("android.intent.category.DEFAULT");
PendingIntent broadcast = PendingIntent.getBroadcast(YourClass.this, r5, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 300000L,
600000L, broadcast);
ManiFest接收器代码,您将在其中获得接收器响应
<receiver android:name="com.yourpackage.AlarmReceiver_"
>
<intent-filter>
<action android:name="android.media.action.DISPLAY_NOTIFICATION" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
您将必须创建Receiver,在其中您将以上面指定的AlarmReceiver_.class名称接收数据