通过 Android Studio 安装的应用程序会在启动时启动,但如果作为 .apk 安装则不会

App install via Android Studio starts at boot but not if installed as an .apk

我的应用程序清单中包含以下内容

 <receiver android:name="com.redacted.BroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE"></action>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>



<activity android:name="com.redacted.activity.UserLaunch" android:label="@string/app_name" android:launchMode="standard" android:clearTaskOnLaunch="true" android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

如果我通过 Android Studio 安装和 运行 应用程序,然后重新启动 phone 然后 BroadcastReceiver 的 onReceive() 由于连接变化而被调用启动后。

但是,如果我构建 .apk 然后安装它,则在设备重新启动时不会调用 onReceive()。 (在 onReceive 中有一个 Log.d() 语句,我在启动后在 logcat 中寻找它,它出现在第一种安装方法中,但不会出现在第二种安装方法中。

为什么会有这种差异?

应用程序安装在所谓的 "stopped state" 中。它需要显式 Intent 启动应用程序的组件之一才能退出停止状态。通常,这是 运行 启动器 activity。在停止状态下,注册的广播接收器将不会工作。

因此,当您从 Android Studio 运行 时,启动器 activity 将您的应用程序从停止状态移出,一切正常。通过其他方式安装需要您自己 运行 启动器 activity 退出停止状态。