2014-10-27 11 views
5

Ich habe einen Dienst in meiner Anwendung, die auf Backend laufen, kann der Dienst gestartet werden, wenn ich die Taste Lautstärketaste gedrückt und stoppte, wenn ich die Taste Lautstärke runter drücken.listen Lautstärke Taste, wenn Telefon gesperrt ist 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; 
     } 


} 
} 

Ich will die gleichen Dinge tun, wenn mein Telefon gesperrt ist (wenn der Bildschirm ausgeschaltet ist), wenn ich im Netz suchen finde ich, dass ich ein BroadcastReceivre verwenden muß ich es testen, aber es funktioniert nicht Arbeit.

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 android manifest ich hinzufügen:

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

Und im mainActivity auf der Methode oncrete ich hinzufügen:

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

Pleas Kann ich mir etwas Hilfe geben, Thinks.

Antwort

0

Versuchen mit Rundfunkempfänger für Intent.ACTION_SCREEN_OFF und Intent.ACTION_SCREEN_ON

5

registrieren, wenn Telefon gesperrt ist/Sleep-Modus wir auf die Schaltfläche Änderungen nicht hören können, tun wir können jedoch einige Hack Lautstärke-Taste zu hören.

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

Diese Anwendungen spielen Medien mit 0 Volumen im Hintergrund und dann wird der Schlüssel immer von Reciever mit MediaButtonIntent

angehört werden