美文网首页
Android本地广播的使用

Android本地广播的使用

作者: 浅_若清风 | 来源:发表于2021-06-08 16:11 被阅读0次

为了解决广播的安全性问题,Android引入了本地广播机制,使用该机制发出的广播只能在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

创建接收器

本地广播是无法通过静态注册的方式来接收的。我们知道静态注册主要是为了在程序未启动的情况下能接收广播,而当我们发送本地广播的时候,程序肯定是已经启动的了,所以我们需要动态注册方式创建接收器。
在这里我们创建一个继承于BroadcastReceiver的类LocalReceiver。onReceive()处理你接收到的广播内容,在这里我用Toast来创建一个提示接收到消息的弹窗

public class LocalReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context,"This is in LocalReceiver",Toast.LENGTH_SHORT).show();
    }
}
创建广播发送按钮

在activity_main.xml文件创建一个用于发送广播的按钮

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button
        android:id="@+id/send_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Send Button"
        />
</LinearLayout>
注册监听器和发送广播
public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;
    private LocalReceiver localReceiver;
    private LocalBroadcastManager localBroadcastManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取实例
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        intentFilter = new IntentFilter("localbroadcast");
        localReceiver = new LocalReceiver();
        //注册本地广播接收器
        localBroadcastManager.registerReceiver(localReceiver,intentFilter);
        //Send broadcast
        Button button = findViewById(R.id.send_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction("localbroadcast");
                localBroadcastManager.sendBroadcast(intent);
            }
        });
    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        unregisterReceiver(localReceiver);
    }
}

首先通过本地广播管理器LocalBroadcastManager的getInstance()方法获取一个实例,并分别创建过滤器IntentFilter和自定义接收器LocalReceiver的实例。给IntentFilter的实例添加一个action:localbroadcast(接收的广播的名称),然后调用LocalBroadcastManager的registerReceiver()方法进行注册,并将LocalReceiver的实例和IntentFilter的实例都传进去。这样本地监听器就创建完成了。
调用LocalBroadcastManager的sendBroadcast()发送本地广播。运行程序,点击Send Button按钮,我们可以看到弹窗显示“This is in LocalReceiver”,说明本地广播发送和接收成功了。

注销

当然,我们最后一定不要忘了取消注册。我们可以通过调用unregisterReceiver()方法来实现。至此,Android的标准广播发送就完成了。

优势

1.发送的广播只能在本程序内传递,不必担心数据泄露
2.其它程序广播无法发送到本程序的内部,不必担心安全漏洞隐患
3.本地广播比系统全局广播更加高效

相关文章

  • Android本地广播的使用

    为了解决广播的安全性问题,Android引入了本地广播机制,使用该机制发出的广播只能在应用程序的内部进行传递,并且...

  • Android广播接收器(三)

    本地广播 前面两篇文章Android广播接收器(一)和Android广播接收器(二)讲的都属于全局广播,即发出的广...

  • android知识点

    一、Android 基础与底层机制 数据库的操作类型有哪些,如何导入外部数据库? 是否使用过本地广播,和全局广播有...

  • 安卓面试大纲

    一、Android 基础与底层机制 数据库的操作类型有哪些,如何导入外部数据库? 是否使用过本地广播,和全局广播有...

  • LocalBroadcastManager本地广播原理解析

    之前有被问到过Android普通广播和本地广播的区别,所以打算分析下本地广播的实现原理以及简单结束两者的区别,算是...

  • android 本地广播

    //发送广播的类 //接收广播的类

  • 安卓四大组件之Broadcast

    广播介绍 广播注册 本地广播 广播介绍在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息...

  • 使用本地广播

    使用本地广播 本地广播的优势: 广播不会离开我们的程序,不会被其他的程序所接收到,即数据信息不会泄露; 同样,其他...

  • 本地广播使用

    首先定义一个本地广播private LocalBroadcastManager mLocalBroadcastMa...

  • 浅谈Android Broadcast

    Android Broadcast Broadcast使用场景 Android广播分为两个方面:广播发送者和广播接...

网友评论

      本文标题:Android本地广播的使用

      本文链接:https://www.haomeiwen.com/subject/efkosltx.html