Volume button when locking Android phone

I have a service in my application that runs on the backend, the service can be started when I press the up button and stop when I press the volume button.

public class SettingsContentObserver extends ContentObserver { int previousVolume; Context context; public SettingsContentObserver(Context c, Handler handler) { super(handler); context=c; AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); previousVolume = audio.getStreamVolume(AudioManager.STREAM_RING); } @Override public boolean deliverSelfNotifications() { return super.deliverSelfNotifications(); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING); int delta=previousVolume-currentVolume; if(delta > 0) { System.out.println("Decreased") ; Intent intent = new Intent(context, MyAlarmService.class); context.stopService(intent); previousVolume=currentVolume; } else if(delta < 0) { System.out.println("Increased"); Intent intent = new Intent(context, MyAlarmService.class); context.startService(intent); previousVolume=currentVolume; } } } 

I want to do the same when my phone is locked (when the screen is off), when I search on the network, I find that I have to use BroadcastReceivre, I test it, but it does not work.

 public class YourBoardcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e("get something", "i dont know what!!"); String intentAction = intent.getAction(); KeyEvent event = null; if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { event = (KeyEvent) intent .getParcelableExtra(Intent.EXTRA_KEY_EVENT); } if (event == null) { return; } int keycode = event.getKeyCode(); int action = event.getAction(); long eventtime = event.getEventTime(); if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keycode == KeyEvent.KEYCODE_HEADSETHOOK) { if (action == KeyEvent.ACTION_DOWN) { Intent intent1 = new Intent(context, MyAlarmService.class); context.stopService(intent1); if (isOrderedBroadcast()) { abortBroadcast(); } else if (action == KeyEvent.ACTION_UP) { Intent intent11 = new Intent(context, MyAlarmService.class); context.startService(intent11); } if (isOrderedBroadcast()) { abortBroadcast(); } } } } } 

In the android manifest, I add:

 <receiver android:name="YourBoardcastReceiver"> <intent-filter> <action android:name="android.intent.action.SCREEN_ON" /> </intent-filter> </receiver> 

And in mainActivity on the oncrete method, I add:

 AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); ComponentName mRemoteControlResponder = new ComponentName(getPackageName(), YourBoardcastReceiver.class.getName()); 

May I help, Thinks.

+5
source share
2 answers

When the phone is locked / sleep mode, we can not listen to the button changes. However, we can crack the volume button a bit.

Github: https://github.com/praslnx8/volume_Screen_Lock

These applications play media files with background 0 in the background, and then the key will always be listened to by Reciever with MediaButtonIntent

+5
source

Try registering with BroadCast Receiver for Intent.ACTION_SCREEN_OFF and Intent.ACTION_SCREEN_ON

0
source

Source: https://habr.com/ru/post/1205601/


All Articles