BroadcastReceiver 是 Android 平台中的一个组件,用于接收并响应系统广播消息。动态注册的 BroadcastReceiver
是在运行时通过代码注册的,而不是在 AndroidManifest.xml 文件中静态声明的。动态注册的 BroadcastReceiver
具有生命周期,通常与注册它的组件(如 Activity 或 Service)绑定在一起。
BroadcastReceiver
可以根据应用的需要在特定时刻注册或注销,提供了更高的灵活性。类型:
应用场景:
以下是一个用于检查在线连接的动态 BroadcastReceiver
的示例:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (isConnected) {
Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "网络未连接", Toast.LENGTH_SHORT).show();
}
}
}
在 Activity 中注册和注销 BroadcastReceiver
:
import android.content.IntentFilter;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
networkChangeReceiver = new NetworkChangeReceiver();
}
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkChangeReceiver, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(networkChangeReceiver);
}
}
问题:应用在后台时无法接收广播。
原因:从 Android 8.0 (API 级别 26) 开始,静态注册的 BroadcastReceiver
在后台的限制变得更加严格,许多系统广播不再发送给后台应用。
解决方法:
BroadcastReceiver
。JobScheduler
或 WorkManager
来定期检查状态。通过上述方法,可以有效管理和优化应用对系统广播的接收,确保在不同场景下都能正确响应。
领取专属 10元无门槛券
手把手带您无忧上云