欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android广播的两种注册方式及区别

程序员文章站 2022-06-28 09:56:50
借鉴自第一行 动态注册 public class MainActivity extends AppCompatActivity { private static final...

借鉴自第一行

动态注册

public class MainActivity extends AppCompatActivity { private static final String TAG = "xbh"; private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewGroup root = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.activity_main, null, false); setContentView(root); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } } }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
监听了网络。IntentFilter中的action是我们想监听的广播。要记得取消注册。

静态注册

动态注册很灵活,但是程序启动之后才能接受到广播。这个时候可以用静态注册。

新建一个BroadcastReceiver

<receiver
    android:name=".BootCompleteReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    intent-filter>
receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
这样就可以监听到开机了。

区别就是一个在app前,一个在app后。

注意,广播接收器不允许开线程,所以他扮演一个打开其他组件的角色。