如果应用程序被强制停止,则BroadCastReceiver正在工作

时间:2012-10-09 14:32:19

标签: android android-intent broadcastreceiver

我已在应用应用#1 中注册了操作字符串 S 的BroadCastReceiver BCR 来自app App#2 我使用正确的操作字符串( S

的broadCast意图

如果应用应用#2 已经打开..已收到意图,表示来自 BCR onReceive()被调用

@Override
public void onReceive(Context context, Intent intent) {
     System.err.println("### ### MyBroadcastReceiver ### onReceive()");

如果 App#2 被强制关闭(来自设置应用程序)或从未选择过(重新启动的设备) 具有相同操作字符串( S )的相同广播未达到我的broadCastReceiver BCR

广播意图代码(注意没有标记..不知道是否需要..&该字符串是 S

String action = "customActionString.something"; 
Intent intent = new Intent(action);
context.sendBroadcast(intent);

我错过了什么?这是标签问题吗?

2 个答案:

答案 0 :(得分:3)

  

如果App#2被强制关闭(来自设置 - 应用程序)或从未被禁用(新重启的设备),则具有相同操作字符串(S)的相同广播无法到达我的broadCastReceiver BCR

正确。

  

我错过了什么?

也许是一项活动。

引用Dianne Hackborn

  

从[Android] 3.1开始安装应用程序时,它们处于“已停止”状态,因此在用户明确启动它们之前它们将无法运行。按下强制停止将使它们返回此状态。

这在the Android 3.1 release notes中描述得有些糟糕。

答案 1 :(得分:0)

所以添加:FLAG_INCLUDE_STOPPED_PACKAGES将使意图从处于“已停止”状态的应用程序到达broadcastReceivers

&安培;你(@CommonsWare)是对的,我最好使用一个Activity,因为打算开一个活动,但现在我使用这个代码,它适用于所有情况(应用程序打开和背景 - 它会带来它前面(以前打开的任何活动),应用程序处于关闭状态 - 它将打开它(来自主要活动),没有安装应用程序 - Toast警告)

try {
      Intent intent = context.getPackageManager().getLaunchIntentForPackage(
"otherAppPackage");
      m_ContainerActivity.startActivity(intent);
} catch (Exception e) {
      Log.e("SomeTag", "otherAppPackage app not found");
      Toast.makeText(m_ContainerActivity, "<app name> is not installed on device", Toast.LENGTH_LONG).show();
}