重启后广播接收器不重启

Broadcast Receiver not restarting after reboot

我正在尝试让我的广播接收器在启动后立即 运行。据我所知,广播接收器将 运行 无论重新启动如何,我刚刚了解到,但我的问题是我已将其设置为每晚午夜 运行 而我不想等到午夜 运行 一次,因为那会破坏目的。但是我需要它在重新启动一次后立即 运行 。但它不是运行ning。有人可以看到我做错了什么吗?我正在 Galaxy S4 和 S6 上尝试此操作,但没有收到表明它已重新启动的日志消息。

这是我的Manifest文件,你可以看到它是必要的权限。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<receiver
        android:name=".StartActivityAtBootReceiver"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
 </receiver>

在我的 StartActivityAtBootReceiver 中,我有 onReceive 调用主 activity 将启动广播接收器。

public void onReceive(Context context, Intent intent) {
    Log.e("LOGS", "Start Activity after Rebooted ");
    Intent rebootIntent = new Intent(context, MainActivity.class);
    rebootIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(rebootIntent);
}

在我的 MainActivity 中,我有以下调用广播接收器的另一个 class 扩展广播接收器。

//run from boot or from button on screen
protected void runFromOutside() throws ParseException {
    checkIfStartingNow();
    startTheClock();
    finish(); //close the app/view
}

//check if starting now pops up message to state that it is staring now
protected void checkIfStartingNow() throws ParseException {
//does some checks and displays a message popup
}

  protected void startTheClock() {

    // Set the alarm to run at midnight every night
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 00);
    //calendar.set(Calendar.MINUTE, 01);
    // Get the AlarmManager Service
    mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    // Create an Intent to broadcast to the Shhh
    mNotificationReceiverIntent = new Intent(MainActivity.this, Shhh.class);

    // Create an PendingIntent that holds the NotificationReceiverIntent
  //  mNotificationReceiverPendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, mNotificationReceiverIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    mNotificationReceiverPendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, mNotificationReceiverIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    //Set repeating alarm that checks every minute.
    mAlarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, mNotificationReceiverPendingIntent);

    // set true for alarm
    settings.edit().putBoolean(NotificationOn, true).apply();
    Log.e("LOGS", "Entered Start the midnight alarm");
}

OK 所以我想通了,它不起作用的原因是因为 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 在 Android Manifest 文件中的位置不正确,所以最后我不得不移动它在 application 标签之外(放置它的正确位置),然后重新启动工作。因此,请确保您的 Android 清单文件中的 XML 布局正确,因为我通过艰难的方式了解到它可能会对您的应用程序造成严重破坏。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 位于 application 标签内,因此它从未起作用。很重要。希望这对将来的其他人有帮助。因此,请确保您的 XML 标签位于正确的位置。