2010-07-30 10 views
0

Je voudrais savoir comment lancer une activité en appuyant longuement sur le bouton média. Dans ce cas, je ne souhaite pas lancer l'activité par défaut: le lecteur de média, celui-ci doit continuer à se lancer lorsque le bouton média a été enfoncé.Comment gérer le bouton de presse long, afin de lancer l'activité?

Espérons, j'ai été explicite.

AL

Question subsidiaire: Pourquoi une touche dure, comme le bouton de recherche, peut directement activité lancer spécifiant dans l'attribut d'activité du manifest.xml, et d'autres, comme le bouton de médias, ne sont mentionnés pour la diffusion action ?

Répondre

6

Je pense que ce que vous devez faire est la suivante:

  1. Ajoutez ceci à votre manifeste:

    <receiver android:name="com.example.MediaButtonReceiver"> 
        <intent-filter android:priority="1000000000"> 
        <action android:name="android.intent.action.MEDIA_BUTTON" /> 
        </intent-filter> 
        </receiver> 
    
  2. Créer la classe MediaButtonReceiver:

    public class MediaButtonReceiver extends BroadcastReceiver { 
        public void onReceive(Context context, Intent intent) { 
         String intentAction = intent.getAction(); 
         if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { 
           KeyEvent 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) { 
           // Start your app here! 
    
           // ... 
    
           if (isOrderedBroadcast()) { 
            abortBroadcast(); 
           } 
          } 
         } 
        } 
    } 
    

J'ai surtout copié ce d'ici: https://android.googlesource.com/platform/packages/apps/Music/+/master/src/com/android/music/MediaButtonIntentReceiver.java

En outre, cela dépend de la diffusion MEDIA_BUTTON étant commandé, ce que je suppose qu'il est. La priorité doit être définie sur quelque chose de plus élevé que l'application multimédia. Malheureusement, l'application média utilise la priorité par défaut, et la documentation ne dit pas ce que c'est (quelle surprise).