通过 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 退出停止状态。
我的应用程序清单中包含以下内容
<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 退出停止状态。