对于解锁和锁屏这种用的比较频繁action,谷歌做了限制,必须手动用代码注册
直接上代码:这是注册广播(手动代码注册广播接收者)
public class MainActivity extends AppCompatActivity { Screen screen; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screen = new Screen(); IntentFilter filter = new IntentFilter(); //添加action filter.addAction("android.intent.action.SCREEN_OFF"); filter.addAction("android.intent.action.SCREEN_ON"); //注册广播接收者 this.registerReceiver(screen,filter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(screen); }
public class Screen extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("android.intent.action.SCREEN_OFF")){ System.out.println("屏幕锁屏了"); }else if (action.equals("android.intent.action.SCREEN_ON")){ System.out.println("屏幕解锁了"); } } }
下面是开机自启:
老套路,新建一个类继承于BroadcastReceiver,然后配置清单文件
<receiver android:name="com.itheima.bootreceiver.BootReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
然后就是onReceiver方法:
public class BootReceiver extends BroadcastReceiver { //当手机重启会执行这个方法 @Override public void onReceive(Context context, Intent intent) { //开启mainActivity Intent intent2 = new Intent(context,MainActivity.class); //☆ 如果在广播里面开启Activity 要设置一个任务栈环境 intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //在广播接收者里面开启activity context.startActivity(intent2); } }
注意:
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);一定要加上一个