Appuyer sur les touches lorsque le téléphone Android est en mode sommeil profond

Description du problème

J'essaie d'écrire une application qui va capturer Volume Up / Down et aussi les boutons du casque Bluetooth enfoncés lorsque l'application est en cours

  • Contexte
  • Premier plan
  • L'arrière-plan et le téléphone sont en mode veille (le bouton d'alimentation est enfoncé)
  • Le premier plan et le téléphone sont en mode veille (le bouton d'alimentation est enfoncé)

Pour les deux premiers points, j'ai écrit une application de test et tout fonctionne dans mon cas, j'envoie une application à l'arrière-plan et appuyez sur le volume vers le haut / bas et mon application capture ces événements. Après avoir appuyé sur un bouton d'alimentation et mon téléphone va en mode veille. Ensuite, j'appuie sur les boutons de volume vers le haut / vers le bas, ne réagissent pas à ces événements, et je ne vois aucun loge dans logcat, comme tout arrêter de fonctionner.

  • Ajoutez une marge par programmation à RelativeLayout. Qu'est-ce que je fais mal?
  • La couleur du premier plan blanc TabWidget?
  • Comment donner l'espacement entre les étoiles de la barre de notation Android?
  • Comment puis-je lancer une demande HTTP Android vers PC via USB?
  • Différence entre SingleTask et SingleInstance
  • Android ScrollView ne se défile pas lorsque le clavier est en marche
  • Applications qui détectent la pression des touches en mode veille.

    Je pense que ce problème ne peut pas être résolu, mais je me souviens que le Media Player standard d'Android capture ces événements lorsque vous appuyez sur les boutons de volume haut / bas pendant que la musique joue. Je pense que cette application peut le faire car il s'agit d'une application système, mais je télécharger Winpm player et ça marche de la même manière. Winapm capture les événements ascendants / descendants du volume lorsque le téléphone est en mode veille. Et les applications de lecteur de musique le font.

    Question

    Je veux comprendre comment cela peut être fait? Comment puis-je écrire une application simple qui va prendre des boutons de volume en haut / bas. Dois-je jouer de la musique à ce moment-là, ou je peux faire ça? Je veux dire, peut-être, la principale raison pour laquelle Winamp et d'autres applications capturent cet événement, c'est que la musique est jouée à ce moment-là. Ou peut-être que ce problème ne peut être résolu et s'il ne peut pas être résolu, je veux savoir pourquoi? J'ai besoin d'arguments pour savoir pourquoi il ne peut pas être résolu.

    Code source

    J'ai testé une application et voici les résultats, j'ai écrit une application simple qui accroche le volume vers le haut et vers le bas appuie sur la touche en arrière plan et au premier plan et aussi lorsque l'application est en mode veille. Tout fonctionne parfaitement lorsque l'application était en arrière-plan et sur le terrain, mes événements de capture d'application de test, mais quand j'appuie sur un bouton d'alimentation, il arrête de le faire, puis j'appuie sur le début sur le média pleyer et il commence à jouer de la musique, après avoir appuyé sur le bouton d'alimentation À nouveau, puis appuyez sur le volume vers le haut et doun et ma carte d'application accroche le volume vers le haut et vers le bas des pressions de touches . Cela signifie que la musique est alors jouée, mon application peut attraper ces événements, alors ma prochaine question, comment je peux simuler, comme mon téléphone, joue de la musique somem? Peut-être que c'est une solution?

    Manifest.xml

    <receiver android:name="com.vito.backgroundworker.VolumeBroadcast" android:enabled="true"> <intent-filter> <action android:name="android.media.VOLUME_CHANGED_ACTION" /> </intent-filter> </receiver> <receiver android:name="RemoteControlReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> 

    MainActivity.java

     public class MainActivity extends Activity { private PowerManager.WakeLock wl; //private BroadcastReceiver vol = new VolumeBroadcast(); private AudioManager mAudioManager; private ComponentName mRemoteControlResponder; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNjfdhotDimScreen"); mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); mRemoteControlResponder = new ComponentName(getPackageName(), RemoteControlReceiver.class.getName()); } @Override protected void onPause() { super.onPause(); mAudioManager.registerMediaButtonEventReceiver( mRemoteControlResponder); wl.release(); }//End of onPause @Override protected void onResume() { super.onResume(); wl.acquire(); }//End of onResume @Override public void onDestroy() { super.onDestroy(); mAudioManager.unregisterMediaButtonEventReceiver( mRemoteControlResponder); } } 

    3 Solutions collect form web for “Appuyer sur les touches lorsque le téléphone Android est en mode sommeil profond”

    Jetez un oeil à registerMediaButtonEventReceiver () . Vous devez enregistrer votre application en tant que destinataire de ces événements afin de pouvoir les recevoir.

    Voici quelques autres liens que vous devriez regarder:

    Selon mon expérience, une application ne peut pas recevoir des diffusions de boutons multimédias lorsque le périphérique est endormi, même s'il s'agit d'un service de premier plan (le bouton de média ne le réveille pas). Le maintien d'un verrouillage de veille partiel l'empêche de dormir afin que le bouton de pression soit détecté. Je pense que votre application de musique est la tenue d'un verrouillage de veille qui explique pourquoi. Je voudrais être prouvé mal et ne pas avoir besoin du verrouillage du sillage cependant …

    J'ai trouvé une application open source qui réveille le sommeil du téléphone en appuyant sur le bouton de volume. https://github.com/praslnx8/volume_Screen_Lock

    Cette application utilise Service pour lire les médias.

    Pendant la lecture du média, l'action du bouton de volume sera toujours envoyée au récepteur respectif, même si l'écran du téléphone est verrouillé …

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.