一个简单的问题。在我强行停止申请后,我是否仍然收到注册的广播接收机?
答案 0 :(得分:27)
在我强制停止申请后,我是否仍然收到注册的广播接收器?
在Android 3.1+上,没有。一旦用户强制停止您的应用程序,您将不再收到任何类型的广播Intents
,直到用户手动启动您的某项活动。
答案 1 :(得分:1)
您不应将FLAG_INCLUDE_STOPPED_PACKAGES添加到您的接收者启动您的活动或服务的意图中。您必须将其添加到您用于sendBroadcast的意图中。意思是,您需要将其添加到调用Broadcast的应用程序中的intent。
这是你应该从另一个应用程序触发你的接收器的方法:
Intent intent = new Intent("com.xxx.my_filter_intent");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
this.sendBroadcast(intent);
如果您无法控制此广播(例如,如果它是系统广播)并且内部没有此类标志 - 那么如果该广播处于强制停止状态,则您的应用将不会被此广播触发。
在此处阅读更多内容:http://developer.android.com/about/versions/android-3.1.html#launchcontrols
答案 2 :(得分:0)
如果您的接收器已在AndroidManifest中注册,那么是的,您的应用仍会收到它。另一方面,如果您通过代码注册(在服务/活动中),那么应用程序将不会收到它
答案 3 :(得分:0)
使用我的方法,如果你想第一次启动一个隐藏的应用程序我做这样的透明Launcher活动
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Transparent"
android:excludeFromRecents="true"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
所以我把这个代码放在oncreat()
中,让我的应用程序隐藏在启动器中PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, MainActivity.class);
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
所以我在启动器上使用此代码用于show app图标,并使其能够在使用广播接收器启动的服务类和网络连接广播接收器类中运行(autostart.java和networkConnectinCheck.java):
PackageManager p = context.getPackageManager();
ComponentName componentName = new ComponentName(context, MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
现在,我可以通过用户手第一次运行应用程序,之后我随时使用我的接收器午餐应用程序。