我是靠谱客的博主 笨笨丝袜,最近开发中收集的这篇文章主要介绍Android定向广播简述:相关知识介绍:实现:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简述:

    有时候我们在使用广播的时候不希望自己发送的广播被其他应用程序接收到,那怎么办呢?我们只能定向的发送广播。本篇博文介绍一下定向广播的使用。

相关知识介绍:

    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定向广播简述:相关知识介绍:实现:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部