简述manifest和代码中如何注册和使用 broadcast receiver ?
参考答案:
在Android开发中,BroadcastReceiver是一个用于接收来自系统或其他应用程序发送的广播的组件。这些广播可以是关于网络状态变化、电池电量低、时区变化等各种系统事件。
Manifest中注册BroadcastReceiver
在AndroidManifest.xml文件中注册BroadcastReceiver是静态注册的方式。这意味着,无论应用程序是否在运行,只要满足指定的条件,系统就会发送广播,并且注册的BroadcastReceiver会接收到这个广播。
例如,下面的代码片段演示了如何在AndroidManifest.xml中注册一个用于接收网络状态变化的BroadcastReceiver:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
...>
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
...
</application>
</manifest>
在这个例子中,NetworkChangeReceiver是一个自定义的BroadcastReceiver类,它负责处理接收到的网络状态变化广播。
在代码中注册BroadcastReceiver
在代码中注册BroadcastReceiver是动态注册的方式。这种方式通常用于那些只在应用程序运行时才需要接收广播的情况。
以下是一个在Activity中动态注册BroadcastReceiver的示例:
public class MyActivity extends AppCompatActivity {
private BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
// 创建BroadcastReceiver实例
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
// 处理网络状态变化
}
}
};
// 注册BroadcastReceiver
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 注销BroadcastReceiver
if (receiver != null) {
unregisterReceiver(receiver);
}
}
}
在这个例子中,BroadcastReceiver在onCreate方法中注册,并在onDestroy方法中注销。这样可以确保在Activity不再可见时,BroadcastReceiver不会继续接收广播,从而节省系统资源。
注意,无论是静态注册还是动态注册,都需要在BroadcastReceiver的onReceive方法中处理接收到的广播。