android跨进程静态广播,Android Studio跨APP(进程)发送自定义广播

《第一行代码(第2版)》5.3.1和5.3.2在模拟器上和真机上运行有些问题,这里我讲一下我的解决办法

我们知道注册广播的方式一般有两种:

1.在代码中注册(也被称为动态注册)。

2.AndroidManifest.xml中注册(也被称为静态注册)。

在同一个进程上发送自定义广播并接收:

首先建一个BroadcastTest空项目

第一步:使用Android Studio提供的快捷方式来创建一个广播接收器来准备接收此广播,点击app—>New—>Other—>Broadcast Receiver,这里将广播接收器命名为MyBroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Toast.makeText(context,"received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();

}

}

当MyBroadcastReceiver收到自定义广播时会弹出“received in MyBroadcastReceiver”的提示

第二步:在AndroidManifest.xml中对这个广播接收器进行修改

这里让MyBroadcastReceiver接收一条值为com.example.broadcasttest.MY_BROADCAST的广播,因此待会儿发送广播时我们需要发出这样的一条广播。

第三步:修改activity_main.xml中的代码

这里定义了一个按钮用于作为发送广播的触发点

第四步:修改MainActivity中的代码

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");

intent.setComponent(new ComponentName("com.example.broadcasttest",

"com.example.broadcasttest.MyBroadcastReceiver"));

sendBroadcast(intent);

}

});

注意:(书上没有)这里在用sendBroadcast(intent)把广播发送出去之前调用了 setComponent方法指定广播接收器,效果图如下(此处我是模拟器测试需要调用该方法,但是真机测试没有该方法也能接收到)

setComponent(new ComponentName(指定接收的包,指定接收器)

f7bdb5acac84e80c8a615d7234d5352f.png

跨App(进程)发送自定义广播:(下面的内容部分书上没有)

第一步:需要在上一个项目的AndroidManifest.xml添加

第二步:需要修改上一个项目的MainActivity

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//设置你这个广播的action,只有和这个action一样的接受者才能接收广播

Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");

/*intent.setComponent(new ComponentName("com.example.broadcasttest",

"com.example.broadcasttest.MyBroadcastReceiver"));

sendBroadcast(intent);*/

sendBroadcast(intent,"com.example.broadcasttest.MY_BROADCAST");

}

});

第三步:新建一个项目BroadcastTest2,按照上面第一步新建一个广播接收器AnotherBroadcastReceiver

public class AnotherBroadcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Toast.makeText(context,"received in AnotherBroadcastReceiver",Toast.LENGTH_LONG).show();

}

}

第四步:修改第二个项目的Manifest.xml

最后在模拟器上(真机上测试我只有第一个广播接收器接收到广播)运行第二个项目,跳转到第一个项目,点击按钮,效果如图

47aea7bd6217c650c28a38dfeb019d48.png

注:上面的两个图是从网上截图下来的

Androidapp广播接收器是指在Android系统中,一个应用程序可以发送广播,而另一个应用程序可以注册并接收该广播。 实现app广播接收器需要以下步骤: 1. 发送广播:在发送广播的应用程序中,需要创建一个Intent对象,并使用setAction()方法为其设置一个自定义的Action,用于标识该广播。然后,使用sendBroadcast()方法发送广播。例如: ```java Intent intent = new Intent(); intent.setAction("com.example.MY_CUSTOM_ACTION"); sendBroadcast(intent); ``` 2. 注册接收器:在接收广播的应用程序中,需要创建一个BroadcastReceiver对象,并使用IntentFilter对象来过滤想要接收的广播。然后,使用registerReceiver()方法注册该广播接收器。例如: ```java BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 处理接收到的广播 } }; IntentFilter filter = new IntentFilter(); filter.addAction("com.example.MY_CUSTOM_ACTION"); registerReceiver(receiver, filter); ``` 在注册广播接收器时,需要注意在AndroidManifest.xml文件中声明接收器的权限,以便允许不同应用程序之间的广播通信。 需要注意的是,发送广播和接收广播的应用程序应该在同一个设备上安装和运行,并且具有相应的权限。否则,app广播接收器可能无法正常工作。 总之,app广播接收器是Android为了实现不同应用程序之间的通信而提供的一种机制,使应用程序能够发送广播并让其他应用程序接收并处理该广播
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值