广播注册和添加权限过滤广播
来源:互联网 发布:日本人长相知乎 编辑:程序博客网 时间:2024/05/21 21:37
android的权限级别:
通常情况下,对于需要付费的操作以及可能涉及到用户隐私的操作,我们都会格外敏感。
出于上述考虑以及更多的安全考虑,Android中对一些访问进行了限制,如网络访问(需付费)以及获取联系人(涉及隐私)等。应用程序如果想要进行此类访问,则需要申请相应权限。Android对这些权限进行了四类分级,不同级别的权限对应不同的认证方式。
normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加标签),安装时不需要用户确认;
dangerous:高风险权限,安装时需要用户的确认才可使用;
signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。
上述四类权限级别同样可用于自定义权限中。如果开发者需要对自己的应用程序(或部分应用)进行访问控制,则可以通过在AndroidManifest.xml中添加标签,将其属性中的protectionLevel设置为上述四类级别中的某一种来实现。
两种注册类型的区别是:
1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了。有个接受器还不够,我们还得重写BroadcastReceiver里面的onReceiver方法
1.常驻型广播,也是静态广播
在AndroidManifest.xm里面配置
<uses-permission android:name="com.cn.customview.permissions.MY_BROADCAST" /> <permission android:name="com.cn.customview.permissions.MY_BROADCAST"> </permission> <receiver android:name=".MyBroadCastReceiver "> <intent-filter android:priority="20"> <action android:name="android.provider.Telephony.MYRECEIVED"/> </intent-filter> </receiver>
public class MyBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "测试广播", Toast.LENGTH_SHORT).show(); //终止广播 abortBroadcast(); } }
发送广播时
private String permission = "com.cn.customview.permissions.MY_BROADCAST";Intent intent = new Intent(); intent.putExtra("demo", "这是一个测试方法"); sendBroadcast(intent, permission);
2.不是常驻型,动态注册广播
在AndroidManifest.xm里面配置
<uses-permission android:name="com.cn.customview.permissions.MY_BROADCAST" /> <permission android:name="com.cn.customview.permissions.MY_BROADCAST"> </permission>
public class MainActivity extends AppCompatActivity { private TextView text; private Button button; private String permission = "com.cn.customview.permissions.MY_BROADCAST"; private String action = "com.cn.customview.permissions.my_broadcast"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = ((TextView) findViewById(R.id.text)); button = ((Button) findViewById(R.id.button)); //实例化过滤器并设置要过滤的广播 IntentFilter filter = new IntentFilter(); //过滤动作 filter.addAction(action); filter.setPriority(100);//优先级设置 //注册广播接受者 registerReceiver(myReceiver, filter, permission, null); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("demo", "这是一个测试方法"); intent.setAction(action); //设置要收到广播所需要的权限 sendBroadcast(intent, permission); } }); } private BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String demo = intent.getStringExtra("demo"); text.setText(demo); } };}
注意:
1.registerReceiver(receiveBroadCast,filter,BROADCAST_PERMISSION_DISC,null);
如果改为registerReceiver(receiveBroadCast, filter);照样能够收到第三步发送的消息,
因为我们在xml里面已经申请了BROADCAST_PERMISSION_DISC权限,所以sendBroadcast(intent,BROADCAST_PERMISSION_DISC);发送广播我们依然能收到。
2.sendBroadcast(intent,BROADCAST_PERMISSION_DISC);
改为sendBroadcast(intent);也同样能收到这个消息。
因为第一个的意思是收到这个消息的广播监听器必须有BROADCAST_PERMISSION_DISC权限,如果第二个参数去掉,则说明广播监听器不需要任何权限就能收到这个消息。
- 广播注册和添加权限过滤广播
- Android中注册和发送广播中添加权限
- Android-动态注册广播和注销广播
- 简单 注册广播和接收广播
- myapplication991静态广播注册和动态广播
- Android动态广播添加权限
- android静态广播添加权限
- 添加广播内容 和 动态广播
- Android广播之注册广播(包括静态广播和动态广播的注册)源码分析
- 广播 注册和xml形式
- 注册广播
- 注册广播
- 注册广播
- Android静态注册广播和动态注册广播的区别
- android广播事件和权限
- 在有序广播中添加自定义权限
- 广播和广播接收者
- 广播和广播接收者
- file_get_contents & curl mark一下
- php 设计模式_命名空间的巧用
- 新的微单到手
- Android Studio的基本设置
- 正则表达式
- 广播注册和添加权限过滤广播
- STL 之 C++ Map容器的简单使用方法
- Android中通知的使用
- 303. Range Sum Query - Immutable [Leetcode]
- 堆 栈(转载)
- MySql+Mybatis+Druid:sql injection violation, multi-statement not allow
- IOS core data遇到问题集合
- Log4j2完全讲解 附项目集成源码下载
- 237,Mac上使用Charles抓包