我在清单
中有一个包含以下内容的应用 <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安装并运行应用程序,然后重新启动手机,那么在启动后连接更改稳定后,广播接收器onReceive()
会被调用。
但是,如果我构建一个.apk然后安装它,那么在设备重启时,onReceive()
不会被调用。 (Log.d()
中有一个onReceive
语句,我在启动后在logcat
中查找,它出现在第一个安装方法但不包含第二个安装方法。
为什么会出现这种差异?
答案 0 :(得分:1)
应用程序安装在所谓的“停止状态”中。它需要一个明确的Intent
启动应用程序的一个组件才能移出停止状态。通常,那是在运行启动器活动。在停止状态下,没有注册的广播接收器可以工作。
因此,当您从Android Studio运行时,启动器活动会将您的应用移出停止状态,一切都很好。通过其他方式安装将要求您自己运行启动器活动以退出停止状态。