android跨应用发广播

来源:互联网 发布:被淘宝托管骗了怎么办 编辑:程序博客网 时间:2024/05/22 00:55

    最近写的一个安卓项目里用到了跨应用间广播通信技术,说白点就是在不同的APP之间发送广播来接收消息,我在做的时候也遇到了一些问题,不过最后都解决了,特在此把自己的遇到的问题分享出来,方便遇到同样的问题的朋友能够快速解决。

    广播注册分为动态注册和静态注册,如果有人不太明白的话,可以自行度娘一下。之前我使用的是静态注册的方式,但是很麻烦,而且还容易报错。我就遇到MainActivity$MyReceiver; no empty constructor这种错误,后来在百度上看到这种错误,是因为要把自己写的BroadcastReceiver前加上static,但是这样加上的结果就是很多跨进程之间传递的变量就不好用了,所以后来又改成用动态方式注册广播,最后把问题解决了。然后自己写了个小demo,老规矩,还是先上代码吧!

    这是第一个APP的内容,其实内容很简单,就只有一个发广播的功能,可以使用Bundle传递很多信息,我这里就简单的传了一个String值。

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//发送广播       Intent intent = new Intent();    intent.setAction("com.example.BroadCast");//这里可以自己定义    Bundle bundle=new Bundle();    bundle.putString("aaa", "111");    intent.putExtras(bundle);    MainActivity.this.sendBroadcast(intent);}});}}

  这是第二个APP,写了一个Receiver,不过大家要注意广播一定要注销,注销的位置可以根据你的实际情况来决定,我这里是写在onDestory()里,代码如下:

   

public class MainActivity extends Activity {TestBroadReceiver testBroadReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);registerTestBroadReceiver();// 开启APP的时候注册广播}@Overrideprotected void onDestroy() {// 关闭APP的时候注销广播unRegisterTestBroadReceiver();super.onDestroy();}private void unRegisterTestBroadReceiver(){if(testBroadReceiver!=null){unregisterReceiver(testBroadReceiver);}}private void registerTestBroadReceiver(){testBroadReceiver=new TestBroadReceiver();IntentFilter filter=new IntentFilter();filter.addAction("com.example.BroadCast");registerReceiver(testBroadReceiver, filter);}/*** * 写一个广播接收器 * @author blh * */  public class TestBroadReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action=intent.getAction();if(action.equals("com.example.BroadCast")){Bundle bundle=intent.getExtras();        if(bundle!=null){        String msg=bundle.getString("aaa");        Toast.makeText(context, "接收到了:"+msg, Toast.LENGTH_LONG);        }}}    }}

  这样子的话就会在第二个app收到吐司。好了,代码已经上完了,大家拿去改改就可以直接用了,是不是很简单呢!

0 0
原创粉丝点击