Я просмотрел много вопросов по stackoverflow, и ни один из них не соответствует моему запросу. Моя текущая ситуация такова, что сейчас у меня есть проект, у которого есть получатель:
public class TestAppReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("recieverTest", "receiving intent for test app and about to schedule job");
ComponentName serviceComponent = new ComponentName(context, TestAppJobService.class);
Random rand = new Random();
int randomNum = rand.nextInt(1000);
JobInfo.Builder builder = new JobInfo.Builder(randomNum, serviceComponent);
builder.setMinimumLatency(30 * 1000); // Wait at least 30s
builder.setOverrideDeadline(60 * 1000); // Maximum delay 60s
JobScheduler jobScheduler = (JobScheduler)context.getSystemService(context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
Log.v("recieverTest", "scheduled job after receiving intent");
}
}
, и мой манифест выглядит так:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECEIVE_QUICKBOOT_POWERON"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:process="com.example.test">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.example.test.TestAppJobService"
android:permission="android.permission.BIND_JOB_SERVICE"></service>
<receiver android:name="com.example.test.TestAppReceiver" android:exported="true" android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
<service
android:name=".MainActivity$ForegroundService"
android:enabled="true" />
</application>
</manifest>
Так что проблема, иногда, когда я перезагружаю свой устройство, я вижу запуск проекта, потому что он получил широковещательную рассылку boot_complete, и он отлично расписывает работу. Тем не менее, в других случаях, когда я перезагружаюсь, ничего не происходит. Разве он не должен планировать работу каждый раз, когда я перезагружаю свое устройство, так как оно получает трансляцию boot_complete? Кроме того, когда я делаю dumpsys из широковещательной статистики, я вижу, что boot_complete не получен, но "Пропущен". Это почему?
И последнее, я даже вручную запускаю трансляцию, выполняя
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
и иногда ничего не делая. Может кто-нибудь мне помочь? У меня явно есть установленные разрешения, и иногда это работает. Просто смущает меня, почему это работает половину времени.
PS это тестируется на пользовательском устройстве, работающем на Android P ie.