Boot/Broadcast 接收器重启问题

Boot/Broadcast Receiver reboot issues

这是一个相当普遍的问题,但我正在失去理智。我想我已经完全满足要求了。我希望 BroadcastReceiver 在 phone 重新启动时做一些事情。

我的 BroadcastReceiver(用于引导):

public class BootReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d("BootupReceiver", "Refreshing alarms.");
    }
}

在我的清单的 'manifest' 标签中:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

在我的清单的 'application' 标签中:

<receiver
    android:name=".receivers.BootReceiver"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

部署应用程序后,我将其关闭,然后手动重新启动。我认为 停止状态 不是问题。

另外

我尝试了这种怪异的各种组合:

<receiver
        android:name=".receivers.BootReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="999">
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.REBOOT"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
</receiver>

我也试过在引用接收者名称时使用绝对包名代替相对包名。

我另外创建了一个简单的独立应用程序,其中只有一个 MainActivity 和上面的 BroadcastReceiver,它正在运行(令人恼火)。

我已经在 Moto G 和三星 Galaxy Edge 7 上测试过了。

是否存在 BootReceiver 无法启动的已知实例?关于我的代码出了什么问题的任何倾向?

我发现了一个类似的问题unanswered

编辑

我还尝试使用广告 shell 手动触发 REBOOT 意图。仍然没有成功。

编辑 2

根据要求提供完整清单。如果您看到已编辑,我只是​​删除了一些可能属于机密的内容。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.REDACTED.REDACTED">

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:name=".REDACTEDApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".ui.activities.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity
        android:name=".ui.activities.InitialActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.LoginActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.CreateAccountActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.MainActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>
    <activity
        android:name=".ui.activities.VideoPlayerActivity"
        android:screenOrientation="landscape"/>
    <activity
        android:name=".ui.activities.DisclaimerActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.EPWebViewActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.EscapePlanActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.EscapeInfoActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.EscapeSessionActivity"
        android:screenOrientation="portrait"/>
    <activity
        android:name=".ui.activities.EscapeDetailActivity"
        android:screenOrientation="portrait"/>

    <meta-data
        android:name="io.fabric.ApiKey"
        android:value="REDACTED"/>

    <activity
        android:name=".ui.activities.RemindersActivity"
        android:screenOrientation="portrait">
    </activity>

    <receiver android:name=".receivers.NotificationsReceiver"/>

    <receiver
        android:name=".receivers.BootReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

</application>

编辑 3

我尝试添加另一个 Receiver,但 Android Studio 生成了它。仍然没有运气。

使用 ADB Shell 专门在应用程序中触发 BOOT_COMPLETED。那里也没有成功。

清理、重建和重新生成 APK 后,它现在可以工作了。我不确定 Studio 是否在缓存旧的 APK,或者我是否 misunderstand/messed 升级了常规版本,但接收器现在正在工作。