Android定向广播
2016-09-20 15:22
2683 查看
简述:
有时候我们在使用广播的时候不希望自己发送的广播被其他应用程序接收到,那怎么办呢?我们只能定向的发送广播。本篇博文介绍一下定向广播的使用。相关知识介绍:
android:ssp属性在进入正题之前先来介绍一下android:ssp这个属性。这个是Google在API level 19加入的一个XML 属性,用于intent过滤的标签中。ssp是scheme-specific part”的缩写,意思是代表的东西都在scheme之后出现,如URI是“http://www.baidu.com”,可以分成scheme部分"http"和ssp部分"//www.baidu.com"。这里需要特别注意例子中的ssp部分是包含"//"的。ssp有以下三种相关形态:
① android:ssp-------精准匹配scheme后的全部内容
② android:sspPrefix-------匹配scheme前缀
③ android:sspPattern-------模式匹配
实现:
由于广播是能够跨进程的,所以定向广播在App应用进程内部可以使用,同样在夸App(或者更准确地说是夸进程)也能够使用。方式一
1、发送广播(自定义广播)经常说”发送广播“和”接收“,表面上看广播作为Android广播机制中的实体,实际上这一实体本身是并不是以所谓的”广播“对象存在的,而是以”意图“(Intent)去表示。所以我们自定义一个广播(模拟发送广播)
@TargetApi(Build.VERSION_CODES.KITKAT) private void sendOritentationBroadcast() { Intent intent = new Intent(); intent.setAction("mybroadcast"); Uri data = Uri.parse("package://com.lzy.orientationbroadcast"); intent.setData(data); MainActivity.this.sendBroadcast(intent); Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show(); }2、注册广播接收器
① 隐式注册(静态广播接收器)
<receiver android:name=".InnerBrocastReceiver"> <intent-filter > <action android:name="mybroadcast"/> <data android:scheme="package" android:sspPrefix="//com.lzy.orientationbroadcast"/> </intent-filter>② 显式注册(动态广播接收器)
@TargetApi(Build.VERSION_CODES.KITKAT) @Override protected void onResume() { super.onResume(); InnerBrocastReceiver receiver = new InnerBrocastReceiver(); IntentFilter pkgFilter = new IntentFilter("mybroadcast"); pkgFilter.addDataScheme("package"); pkgFilter.addDataSchemeSpecificPart("com.lzy.orientationbroadcast", PatternMatcher.PATTERN_LITERAL); MainActivity.this.registerReceiver(receiver,pkgFilter); }3、扩展BroadcastReceiver
public class InnerBrocastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "应用内:::接收到定向广播", Toast.LENGTH_SHORT).show(); }4、测试
我写了两个App,其中一个app负责发送广播并在应用内接收广播,另一个采用隐式注册只是负责接收广播。注意:别人反编译你的manifest.xml文件后,找到ssp格式同样可以接收到你发的广播(不安全)。
方式二:
这种形式更像是Broadcast组件与其他组件见得通信不再像是广播了,每次发送广播(或者叫数据)要严格制定包名和类名。这种形式是适用于自己发送的广播的形式,不适用于系统发送的广播.实现如下:1、发送广播的代码:
private void sendOritentationBroadcast() { Intent intent = new Intent(); intent.setComponent(new ComponentName(getApplicationContext(),InnerBroadcastReceiver.class)); MainActivity.this.sendBroadcast(intent); Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show(); }2、注册:
<receiver android:name=".InnerBroadcastReceiver" />3、扩展BroadcastReceiver
public class InnerBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "wefg", Toast.LENGTH_SHORT).show(); } }
相关文章推荐
- Android之定向广播
- Android 的定向广播 局部广播
- Android中的广播也定向
- 解析JVM线程同步机制&& Android中的广播也定向
- Android--广播机制
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- android 的动作、广播、类别等标识大全
- 图解 Android 广播机制
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- .Net Remoting实现定向广播
- android.intent.action.MEDIA_MOUNTED广播无法收到的问题
- android 广播机制
- [Android]静态广播监听器
- Android深入探究笔记之二十 -- 广播接收者,BroadcastReceiver
- 通过广播Intent控制Android系统自带的音乐播放器
- Android 广播事件处理Broadcast Receiver
- android广播监听短信并显示内容
- 受限与定向广播
- 系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android深入探究笔记之二十 -- 广播接收者,BroadcastReceiver