對於解鎖和鎖屏這種用的比較頻繁action,谷歌做了限制,必須手動用代碼注冊
直接上代碼:這是注冊廣播(手動代碼注冊廣播接收者)
1 public class MainActivity extends AppCompatActivity { 2 Screen screen; 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 screen = new Screen(); 9 IntentFilter filter = new IntentFilter(); 10 //添加action 11 filter.addAction("android.intent.action.SCREEN_OFF"); 12 filter.addAction("android.intent.action.SCREEN_ON"); 13 //注冊廣播接收者 14 this.registerReceiver(screen,filter); 15 } 16 17 @Override 18 protected void onDestroy() { 19 super.onDestroy(); 20 unregisterReceiver(screen); 21 }
1 public class Screen extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 String action = intent.getAction(); 5 if (action.equals("android.intent.action.SCREEN_OFF")){ 6 System.out.println("屏幕鎖屏了"); 7 }else if (action.equals("android.intent.action.SCREEN_ON")){ 8 System.out.println("屏幕解鎖了"); 9 } 10 } 11 }
下面是開機自啟:
老套路,新建一個類繼承於BroadcastReceiver,然后配置清單文件
1 <receiver android:name="com.itheima.bootreceiver.BootReceiver"> 2 <intent-filter > 3 <action android:name="android.intent.action.BOOT_COMPLETED"/> 4 </intent-filter> 5 </receiver>
然后就是onReceiver方法:
1 public class BootReceiver extends BroadcastReceiver { 2 3 //當手機重啟會執行這個方法 4 @Override 5 public void onReceive(Context context, Intent intent) { 6 7 //開啟mainActivity 8 Intent intent2 = new Intent(context,MainActivity.class); 9 //☆ 如果在廣播里面開啟Activity 要設置一個任務棧環境 10 intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 11 //在廣播接收者里面開啟activity 12 context.startActivity(intent2); 13 14 } 15 16 }
注意:
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);一定要加上一個