今天学习了本地广播接收器LocalBroadcastReceiver,详细记录一下!
相比前面的系统和全局广播来说,本地广播有效的解决了数据安全性的问题,例如在全局广播中那我们都知道我们的广播中携带数据的广播 信息容易被其他程序截获,或者其他程序可能向我们的程序不停的发送垃圾信息,因此使用本地广播就有效的解决了这一问题的发生:
本地广播的实现主要是依赖LocakBroadcastManager来对广播进行管理,由此提供广播的发送和接受,下面是我的Demo
public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private LocalBroadcastManager localBroadcastManager; private LocalReceiver localReceiver; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localBroadcastManager= LocalBroadcastManager.getInstance(this); btn= (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent( "com.exapmle.shanshui.LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent);//发送广播 } }); intentFilter=new IntentFilter(); intentFilter.addAction("com.exapmle.shanshui.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); //注册本地广播监听器 localBroadcastManager.registerReceiver(localReceiver,intentFilter); } /* * * 本例实现的是动态注册年广播接收器 * 所以需要在Destory中接触绑定注册*/ @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); } class LocalReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "接收到本地广播", Toast.LENGTH_SHORT).show(); } } }
从代码上来看我们知道,在本地广播机制中,我们只能使用的是动态的注册接收器,因为静态注册的方法是主要为了让程序在未启动的情况下也能接受广播,而我们的本地广播是在程序启动的时候执行,所以就完全不需要实现静态的注册(也就是不需要在AndroidMainfest清单文件中声明注册)