我已在应用应用#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);
我错过了什么?这是标签问题吗?
答案 0 :(得分:3)
如果App#2被强制关闭(来自设置 - 应用程序)或从未被禁用(新重启的设备),则具有相同操作字符串(S)的相同广播无法到达我的broadCastReceiver BCR
正确。
我错过了什么?
也许是一项活动。
从[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();
}