Слушайте кнопку громкости, когда телефон заблокирован android

У меня есть служба в моем приложении, которая запускается на бэкэнде, служба может быть запущена, когда я нажимаю кнопку увеличения громкости, и останавливается, когда я нажимаю кнопку уменьшения громкости.

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;
        }


}
}

Я хочу делать то же самое, когда мой телефон заблокирован (когда экран выключен), когда я ищу в сети, я обнаруживаю, что мне нужно использовать BroadcastReceivre, я тестирую его, но он не работает.

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();


    }
}
}
}


}

В манифесте Android я добавляю:

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

А в mainActivity по методу oncrete добавляю:

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

«Прошу, я могу помочь?» - думает.


person Wafae    schedule 27.10.2014    source источник


Ответы (2)


Когда телефон заблокирован / находится в спящем режиме, мы не можем прослушивать изменения кнопок, однако мы можем сделать некоторые взломы, чтобы прослушивать кнопку громкости.

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

Эти приложения воспроизводят мультимедиа с нулевой громкостью в фоновом режиме, а затем ключ всегда будет прослушиваться Reciever с MediaButtonIntent

person Prasanna Anbazhagan    schedule 03.02.2016

Попробуйте зарегистрироваться в BroadCast Receiver для Intent.ACTION_SCREEN_OFF и Intent.ACTION_SCREEN_ON

person Renier    schedule 20.08.2015