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(指定接收的包,指定接收器)

Android Studio跨APP(进程)发送自定义广播_第1张图片

跨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

 
        
            
                
            
        

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

Android Studio跨APP(进程)发送自定义广播_第2张图片

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

你可能感兴趣的:(Android)