android中实现本地广播
上一篇文章实现了自定义广播: android中实现自定义广播
自定义广播允许被其他应用使用,有些情况下只允许广播在本应用范围内使用,可以用本地广播的方式实现
下面是实现的代码部分,MainActivity.java:
package com.example.chenrui.app1; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.WifiManager; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private BroadcastReceiver receiver; private LocalBroadcastManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter(); filter.addAction("com.example.chenrui.app1.broadcast2"); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String key = intent.getStringExtra("key"); Toast.makeText(context, "接收广播2,key:" + key, Toast.LENGTH_SHORT).show(); } }; manager = LocalBroadcastManager.getInstance(this); manager.registerReceiver(receiver,filter); Button button = findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.chenrui.app1.broadcast2"); intent.putExtra("key","hello world"); manager.sendBroadcast(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); manager.unregisterReceiver(receiver); } }
本地广播的方式,发送广播和接收广播都是在一个类里面实现的,代码跟之前自定义广播的代码很类似,只有很小的改动。
本地广播只能以动态注册的方式注册,无法像自定义广播以静态的方式注册。因为自定义广播可以被外部应用接收到,静态注册功能允许在程序未启动的情况下能收到广播。本地广播只能被自己接收到,也就不需要静态注册的功能了。
上面的代码,同时实现了广播的时候,传递数据功能。代码很好理解,这里就不做解释了。