本地广播,了解一下localBroadcastManager

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jian11058/article/details/82224104

广播安全:由于之前的广播都是全局的,所有应用程序都可以接收到,这样就很容易会引起安全性的问题,比如说我们发送一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。

  为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自应用程序发出的广播,这样所有的安全性问题就都不存在了。

2.2 核心用法

  使用LocalBroadcastManager来管理广播:

调用LocalBroadcastManager.getInstance()来获得实例
调用xx.registerReceiver()来注册广播
调用xx.sendBroadcast()发送广播
调用xx.unregisterReceiver()取消注册
2.3 注意事项

本地广播无法通过静态注册来接收,相比起系统全局广播更加高效

贴码直观

package com.fpt.mybroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {


    private Button btnOrderlyBroadcast;
    private IntentFilter intentFilter;
    private LocalReceiver localReceiver;
    private LocalBroadcastManager localBroadcastManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnOrderlyBroadcast=findViewById(R.id.Btn);
        btnOrderlyBroadcast.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {//该方法运行后,直接调用LocalReceiver.onReceive();
                Intent intent = new Intent("com.nyl.orderlybroadcast.AnotherBroadcastReceiver");
                //发送本地广播
                localBroadcastManager.sendBroadcast(intent);
                intentFilter = new IntentFilter();
                intentFilter.addAction("com.nyl.orderlybroadcast.AnotherBroadcastReceiver");
                localReceiver = new LocalReceiver();
                //注册本地接收器
                localBroadcastManager.registerReceiver(localReceiver,intentFilter);//注册广播
            }
        });
        localBroadcastManager = LocalBroadcastManager.getInstance(this);//获取广播实例赋值对象

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(localReceiver);//取消广播
    }

    private class LocalReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "收到本地广播", Toast.LENGTH_SHORT).show();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/jian11058/article/details/82224104
今日推荐