Android学习笔记之无序广播

安卓中一共有两中广播类型:有序广播和无序广播今天我在此复习一下无序广播

无序广播特点

  • 1、无序广播不可以被拦截;
  • 2、所有接收无序广播的接收者均能接收到此广播,并且是同时接收到;
  • 3、可以指定接收权限和发送权限;
  • 4、无序广播不可以传递数据;

广播的接收和发送

如何发送一条广播

  send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(action);
                sendBroadcast(intent);//不带权限发广播
            }

如何接收到一条广播

1、创建BroadCastReceiver的子类

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.i("MyReciever","我接收到了广播" + action);
    }
}

2、在清单文件中注册广播

  <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="com.fcd.action"/>
            </intent-filter>
   </receiver>

指定无序广播接收权限

1、在发送者的清单文件中声明权限

 <permission android:name="com.fcd.application.permission.MYPERMISSION"/>

2、发送广播时要带上权限

   private String action = "com.fcd.action";
    private String permission = "com.fcd.application.permission.MYPERMISSION";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button send = findViewById(R.id.btn_send);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(action);![](https://img2020.cnblogs.com/blog/1088895/202007/1088895-20200709012545338-1543961342.png)


//                sendBroadcast(intent);不带权限发广播
                sendBroadcast(intent,permission);//带权限发广播
            }
        });

这样没有接收权限的应用就无法接收到广播了

如果需要给给接收者应用开放权限就可以了

 <uses-permission android:name="com.fcd.application.permission.MYPERMISSION"/>

指定无序广播发送权限

和指定接收权限是相反的过程:
1、先给广播的接收者设置自定义权限

  <permission android:name="com.fcd.application.permission.RECEIVER"/>
  ....
  <!--注意要在声明reciever时,同时声明权限-->
   <receiver android:name=".MyReceiver"
            android:permission="com.fcd.application.permission.RECEIVER">
            <intent-filter>
                <action android:name="com.fcd.action"/>
            </intent-filter>
    </receiver>

2、然后给发送者开放权限即可

   <uses-permission android:name="com.fcd.application.permission.RECEIVER"/>

总结

1、当发送者 不希望所有人接收到此广播,可以通过添加发送者权限来控制
步骤:

1、在清单文件中用<permission></permission>标签声明自定义权限
2、在发送广播时、调用sendBroadcast两个参数的方法、将权限设置为第二个参数
3、为需要接收广播的应用添加对应的权限

2、 当接收者,不希望接收所有同名的广播时 可以通过添加接收权限来控制
步骤

1、在清单文件中声明权限<permission></permission>标签  声明自定义权限
2、在<receiver></receiver>标签上、添加对应权限 
3、为需要发送广播权限的应用、添加对应的权限

最后附上项目源码
https://gitee.com/peterLiz/android_learning.git

需要技术开发服务加QQ:599490685,程序员很忙非诚勿扰!!!!

posted @ 2020-07-09 01:52  千雨千寻  阅读(394)  评论(0)    收藏  举报