2

我有两个应用程序 A1 和 B1.A1 有一个广播接收器,我想从 B1 注册这个广播接收器。所以我尝试了

Intent intent = new Intent();
intent.setClassName("pkgname","pkgname.BroadCastReceiverName");
intent.setAction("xxx.x...xxx");
getApplicationContext().sendBroadcast(intent);

但它不会触发/注册任何接收器。

如何在另一个应用程序中访问一个应用程序的广播接收器?

提前致谢

4

4 回答 4

1

希望这对你有用,

在 App1 中:调用 App2 的广播接收器(我的广播接收器“MyBroadCastReceiver”的名称)。

您可以将此方法放置在任何 Button onClick() 中或根据您的要求。

 private void getAnotherAppMethod(){
    Intent intent = new Intent("Updated");
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    // for Example, here packageName of app2 is "com.app2.example" and its class name with packageName can be like "com.app2.example.yourBroadCastRecevier"
    intent.setComponent(new ComponentName("package name of app2","package.yourbroadcastreciverName in app2"));
    getContext().sendBroadcast(intent);
}

在 App2 中:位于 App2 中的被称为广播接收器

public class MyBroadCastReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent != null)
        {
            String sIntentAction = intent.getAction();
            if (sIntentAction != null && sIntentAction.equals("youActionName"))
            {
                Toast.makeText(context, "Hello From App2", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(context,"Something went wrong",Toast.LENGTH_SHORT).show();
            }
        }

    }
}

在 App2: AndroidManifest.xml 文件中,在您的应用程序标签 中添加以下代码

<receiver
       android:name=".MyBroadCastReceiver"
       android:enabled="true"
       android:exported="true">
       <intent-filter>
            <action android:name="youActionName" />
       </intent-filter>
</receiver>
于 2018-12-19T11:38:56.687 回答
0

应用程序 B1 中的广播接收器应使用您从应用程序 A1 广播的适当意图过滤器在 AndroidManifest.xml 文件中注册。

于 2013-05-15T10:25:05.937 回答
0

首先,在使用这样的反射时总是要进行一些错误检查,因为用户手机上可能没有所需的包和接收器。上述方法应该可以工作,但您必须先设置一些先决条件:在另一个应用程序中将 android:exported="true" 设置为广播接收器 在安装后至少运行另一个应用程序,因为像这样的全局接收器只有在应用程序由用户在列表中运行一次。我认为从 android 4.x 开始就是这种情况,但在旧版本上可能是相同的(如果有人知道更改时的确切版本,请添加)

于 2013-05-15T10:26:17.573 回答
0

您可以在 App A1(例如 Activity1)的 Activity 中创建一个方法(例如 register()),并在其中添加一些代码来注册它的 brodcastreceiver。在 Activity1 的 onCreate() 中检查它的额外内容Intent是否有用于例如reg在 Activity1 的 onCreate() 中调用 register()。现在,当你想注册你的广播接收器时,从 App B1 启动 Activity1 就足够了,其意图具有额外的特定键,例如reg

于 2013-05-15T10:34:11.110 回答