android 应用间广播,跨应用(跨进程)发送广播和接收广播

跨应用发送和接收广播,与同应用下的情况差不多,只需要添加一个权限,以及配置一下receiver的android:process属性即可

发送广播的应用中:

Intent intent = new Intent("info.zhegui.receiver.interprocess");

sendBroadcast(intent);

注意要在manifest.xml添加接收广播的权限,这个权限是receiver自定义的

接收广播的应用中:

public class MyReceiver extends BroadcastReceiver {

private final String TAG = this.getClass().getName();

@Override

public void onReceive(Context content, Intent intent) {

Log.i(TAG, "intent:" + intent);

}

}

在manifest.xml中添加自定义权限,以及配置receiver的几个属性

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android发送进程广播需要使用到Binder机制,下面是一份简单的代码实现: 1. 创建一个自定义的广播接收器类MyBroadcastReceiver,继承自BroadcastReceiver,用于处理接收到的广播消息。 ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String message = intent.getStringExtra("message"); Log.d("MyBroadcastReceiver", "Received message: " + message); } } ``` 2. 在发送进程中,创建一个远程服务MyService,它会在onCreate()方法中注册一个广播接收器MyBroadcastReceiver。 ```java public class MyService extends Service { private MyBroadcastReceiver receiver; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); receiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter("com.example.broadcasttest.ACTION"); registerReceiver(receiver, filter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); } } ``` 3. 在发送进程中,启动MyService服务,并使用Intent发送广播消息。 ```java // 启动MyService服务 Intent intent = new Intent(this, MyService.class); startService(intent); // 发送广播消息 Intent broadcastIntent = new Intent("com.example.broadcasttest.ACTION"); broadcastIntent.putExtra("message", "Hello, world!"); sendBroadcast(broadcastIntent); ``` 4. 在接收进程中,创建一个远程服务MyService,它会在onCreate()方法中注册一个广播接收器MyBroadcastReceiver,并将这个广播接收器的Stub对象传递给发送进程。 ```java public class MyService extends Service { private MyBroadcastReceiver receiver; @Nullable @Override public IBinder onBind(Intent intent) { return new MyBinder(); } @Override public void onCreate() { super.onCreate(); receiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter("com.example.broadcasttest.ACTION"); registerReceiver(receiver, filter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); } private class MyBinder extends IMyBroadcastReceiver.Stub { @Override public void onReceive(Intent intent) throws RemoteException { receiver.onReceive(MyService.this, intent); } } } ``` 5. 在接收进程中,创建一个远程服务连接对象MyServiceConnection,用于连接到发送进程中的MyService服务,并获取该服务返回的MyBinder对象。 ```java private IMyBroadcastReceiver myBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { myBinder = IMyBroadcastReceiver.Stub.asInterface(iBinder); } @Override public void onServiceDisconnected(ComponentName componentName) { myBinder = null; } }; // 启动MyService服务 Intent intent = new Intent(this, MyService.class); bindService(intent, connection, Context.BIND_AUTO_CREATE); ``` 6. 在接收进程中,使用MyBinder对象的onReceive()方法接收广播消息。 ```java if (myBinder != null) { Intent intent = new Intent(); intent.putExtra("message", "Hello, world!"); myBinder.onReceive(intent); } ``` 以上就是一份简单的进程广播的代码实现,需要注意的是: 1. 在发送进程接收进程中都需要创建一个远程服务,并分别注册一个广播接收器。 2. 在接收进程中,通过MyBinder对象的Stub实现类将广播消息传递给广播接收器处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值