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

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

 

 

发送广播的应用中:

 

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

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

 <uses-permission android:name="info.zhegui.receiver.RECEIVE"/>

 

接收广播的应用中:

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的几个属性

    <permission android:name="info.zhegui.receiver.RECEIVE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver
            android:name="info.zhegui.receiver.MyReceiver"
            android:exported="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="info.zhegui.receiver.interprocess" />
            </intent-filter>
        </receiver>
    </application>

 

 

需要注意的三个地方:

1,自定义权限

2,android:exported="true"

3,android:process=":remote" (有时候可以不要该属性)

 

动态注册也是可能的。

 

参考文档:

http://developer.android.com/guide/topics/manifest/receiver-element.html

http://developer.android.com/training/articles/security-tips.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值