以下是常用系统action
系统操作 | action |
---|---|
监听网络变化 | android.net.conn.CONNECTIVITY_CHANGE |
关闭或打开飞行模式 | Intent.ACTION_AIRPLANE_MODE_CHANGED |
充电时或电量发生变化 | Intent.ACTION_BATTERY_CHANGED |
电池电量低 | Intent.ACTION_BATTERY_LOW |
电池电量充足(即从电量低变化到饱满时会发出广播 | Intent.ACTION_BATTERY_OKAY |
系统启动完成后(仅广播一次) | Intent.ACTION_BOOT_COMPLETED |
按下照相时的拍照按键(硬件按键)时 | Intent.ACTION_CAMERA_BUTTON |
屏幕锁屏 | Intent.ACTION_CLOSE_SYSTEM_DIALOGS |
设备当前设置被改变时(界面语言、设备方向等) | Intent.ACTION_CONFIGURATION_CHANGED |
插入耳机时 | Intent.ACTION_HEADSET_PLUG |
未正确移除SD卡但已取出来时(正确移除方法:设置--SD卡和设备内存--卸载SD卡) | Intent.ACTION_MEDIA_BAD_REMOVAL |
插入外部储存装置(如SD卡) | Intent.ACTION_MEDIA_CHECKING |
成功安装APK | Intent.ACTION_PACKAGE_ADDED |
成功删除APK | Intent.ACTION_PACKAGE_REMOVED |
下载并且成功安装 | intent.action.PACKAGE_INSTALL |
重启设备 | Intent.ACTION_REBOOT |
屏幕被关闭 | Intent.ACTION_SCREEN_OFF |
屏幕被打开 | Intent.ACTION_SCREEN_ON |
关闭系统时 | Intent.ACTION_SHUTDOWN |
重启设备 | Intent.ACTION_REBOOT |
那我们如何使用呢
动态注册方式:
public class MainActivity extends Activity {
private ScreenReceiver screenReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//动态的去注册广播接收者
screenReceiver = new ScreenReceiver();
//创建IntentFilter 对象
IntentFilter filter = new IntentFilter();
//添加要注册的action
filter.addAction("android.intent.action.SCREEN_OFF");
filter.addAction("android.intent.action.SCREEN_ON");
//动态注册广播接收者
registerReceiver(screenReceiver, filter);
}
@Override
protected void onDestroy() {
//当activity 销毁的时候要取消注册广播接收者
unregisterReceiver(screenReceiver);
super.onDestroy();
}
}
public class ScreenReceiver extends BroadcastReceiver {
//当我们进行屏幕锁屏和解锁 这个方法执行
@Override
public void onReceive(Context context, Intent intent) {
//获取当前广播的事件类型
String action = intent.getAction();
if("android.intent.action.SCREEN_OFF".equals(action)){
System.out.println("屏幕锁屏了 ");
}else if ("android.intent.action.SCREEN_ON".equals(action)) {
System.out.println("屏幕解锁了");
}
}
}
静态注册
直接写BroadcastReceiver文件,MainAndroidfast.XML配置
public class SdcardStateReceiver extends BroadcastReceiver {
//当sd状态发生改变的时候执行
@Override
public void onReceive(Context context, Intent intent) {
//获取到当前广播的事件类型
String action = intent.getAction();
if ("android.intent.action.MEDIA_MOUNTED".equals(action)) {
System.out.println("说明sd卡挂载了 ....");
}else if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) {
System.out.println("说明sd卡卸载了 ");
}
}
}
<receiver android:name="com.itheima.sdcardstate.SdcardStateReceiver">
<intent-filter >
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<action android:name="android.intent.action."/>
<!--小细节 这里需要配置一个data 约束类型叫file 因为sd里面存的数据类型是file -->
<data android:scheme="file"/>
</intent-filter>
</receiver>