how to get broadcast for screen lock in android

前端 未结 2 644
轻奢々
轻奢々 2021-01-02 22:29

How to get trigger that screen is locked or on in android?? i tried using SCREEN_OFF & SCREEN_ON action in broadcast receiver but it\'s not working.

publ         


        
2条回答
  •  清酒与你
    2021-01-02 23:06

    Call the UpdateService.class within your MainActivity.class .

    startService(new Intent(MainActivity.this, UpdateService.class));

    UpdateService.class

    public class UpdateService extends Service {
    
        BroadcastReceiver mReceiver;
        public static int countOn = 0;
        public static int countOff = 0;
    
        @Override
        public void onCreate() {
            super.onCreate();
            // register receiver that handles screen on and screen off logic
            Log.i("UpdateService", "Started");
            IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            filter.addAction(Intent.ACTION_ANSWER);
            mReceiver = new MyReceiver();
            registerReceiver(mReceiver, filter);
        }
    
        @Override
        public void onDestroy() {
    
            unregisterReceiver(mReceiver);
            Log.i("onDestroy Reciever", "Called");
    
            super.onDestroy();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            // TODO Auto-generated method stub
            boolean screenOn = intent.getBooleanExtra("screen_state", false);
            if (!screenOn) {
                Log.i("screenON", "Called");
                Log.i("viaService", "CountOn =" + countOn);
    
                Toast.makeText(getApplicationContext(), "Awake", Toast.LENGTH_LONG)
                        .show();
            } else {
                Log.i("screenOFF", "Called");
                Log.i("viaService", "CountOff =" + countOff);
            }
    
    
            return START_STICKY;
        }
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
    }
    

    Receiver class

    public class MyReceiver extends BroadcastReceiver {
        private boolean screenOff;
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                screenOff = true;
                // Log.i("via Receiver","Normal ScreenOFF" );
            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                screenOff = false;
            } else if(intent.getAction().equals(Intent.ACTION_ANSWER)) {
    
            }
    
            Intent i = new Intent(context, UpdateService.class);
            i.putExtra("screen_state", screenOff);
            context.startService(i);
        }
    
    }
    

提交回复
热议问题