必須使用 Android 定義的標準常量,區分大小寫:
// 網絡狀態變化
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
// 或使用常量 (需 API 21+)
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
// 電量變化
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
// filter.addAction("android.intent.action.BATTERY_CHANGED");
// 開機完成
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
// filter.addAction("android.intent.action.BOOT_COMPLETED");
// 設置變化
filter.addAction(Settings.ACTION_SETTINGS_CHANGED);
// 定義常量類
public class CustomActions {
public static final String USER_LOGIN = "com.myapp.action.USER_LOGIN";
public static final String DATA_REFRESH = "com.myapp.action.DATA_REFRESH";
public static final String FILE_DOWNLOAD_COMPLETE = "com.myapp.action.FILE_DOWNLOAD_COMPLETE";
}
// 發送廣播
Intent intent = new Intent(CustomActions.USER_LOGIN);
intent.putExtra("userId", 123);
sendBroadcast(intent);
// 註冊接收
IntentFilter filter = new IntentFilter();
filter.addAction(CustomActions.USER_LOGIN);
filter.addAction(CustomActions.DATA_REFRESH);
registerReceiver(myReceiver, filter);
public class MainActivity extends AppCompatActivity {
private MyReceiver receiver;
private IntentFilter filter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupReceiver();
}
private void setupReceiver() {
receiver = new MyReceiver();
filter = new IntentFilter();
// 系統廣播
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_BATTERY_LOW);
// 自定義廣播
filter.addAction("com.myapp.action.USER_LOGIN");
filter.addAction("com.myapp.action.DATA_SYNC");
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (receiver != null) {
unregisterReceiver(receiver); // 必須註銷,否則內存洩漏
}
}
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
switch (action) {
case ConnectivityManager.CONNECTIVITY_ACTION:
// 處理網絡變化
break;
case "com.myapp.action.USER_LOGIN":
int userId = intent.getIntExtra("userId", -1);
// 處理登錄
break;
}
}
}
}
ACTION_BOOT_COMPLETED、ACTION_LOCALE_CHANGED 等仍可靜態註冊onResume 註冊,onPause/onDestroy 註銷android:exported="false" (動態註冊無需配置)