0

我在应用程序App#1中为操作字符串S注册了 BroadCastReceiver BCR 从应用程序App#2我使用正确的操作字符串 ( S )进行广播意图

如果应用程序App#2已经打开..onReceive()BCR接收到意图的含义被调用

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

如果App#2被强制关闭(来自 Setting-Applications)或从未打开(新重新启动的设备),具有相同操作字符串 ( S ) 的相同广播不会到达我的 broadCastReceiver BCR

广播意图的代码(注意没有标志..不知道它是否需要..&那个字符串是S

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

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

4

2 回答 2

3

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

正确的。

我错过了什么?

一个活动,也许。

引用Dianne Hackborn 的话

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

这在Android 3.1 发行说明中描述得有些差劲。

于 2012-10-09T14:35:40.493 回答
0

因此添加: FLAG_INCLUDE_STOPPED_PACKAGES 将使意图从处于“停止”状态的应用程序到达广播接收器

&你(@CommonsWare)是对的,我在使用活动方面做得更好,因为意图是打开一个活动,但现在我使用这个代码,它在所有情况下都能正常工作(应用程序在后台打开 - 它会将它带到前面(之前打开的任何活动),应用程序处于关闭状态 - 它将打开它(从主活动),没有安装应用程序 - 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();
}
于 2012-10-19T08:16:42.073 回答