reproductor para musica mejor gratis descargar crossfader con anuncios android android-service

android - para - reproductor de musica descargar



Controla el reproductor de música predeterminado de Android o cualquier otro reproductor de música (6)

¿Cómo controlar el reproductor de música predeterminado de Android o cualquier otro reproductor? Al controlar me refiero a pausar, jugar, siguiente, etc. ¿Tengo que vincular el servicio? He intentado usar el servicio IMediaPlaybackService pero no funciona. Ciertamente hay una salida ya que he visto aplicaciones en el mercado de Android que controlan el reproductor de música. ¿Alguna idea?


El problema con el envío de Intent para el receptor de difusión es que, el usuario debe abrir el Reproductor de música al menos una vez, además, no funciona para muchos reproductores de música de terceros.

El código que figura a continuación funciona en todos los reproductores de música.

long eventtime = SystemClock.uptimeMillis(); Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); sendOrderedBroadcast(downIntent, null); Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); sendOrderedBroadcast(upIntent, null); /*NEXT*/ Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); sendOrderedBroadcast(downIntent, null); /*PREVIOUS*/ Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); sendOrderedBroadcast(downIntent, null);

He probado este código en dispositivos Sony, HTC y Samsung.

Este código imita la acción del botón de reproducción / pausa desde manos libres (auriculares).


Hay un nuevo método en Android 4.4 llamado RemoteController, pero es un dolor en el culo y no pude hacerlo funcionar. También requiere que dirijas al usuario a la configuración de seguridad global y que te permita el acceso de la aplicación a todas sus notificaciones. No estoy seguro de lo que Google estaba pensando aquí.

De todos modos, seguí todas las instrucciones, pero registerRemoteController() aún devuelve false así que no hay mucho más que pueda hacer (al parecer, Google nunca ha oído hablar de códigos de error).

Dado que el método del usuario 2572182 no parece funcionar en Android 4.4, parece que esto es imposible.

Edición: Encontré una aplicación de ejemplo que utiliza RemoteController en XDA de todos los lugares (¿quién sabía que había contenido útil allí?). Funciona en mi teléfono, pero aún debe decirle a sus usuarios que vayan a cambiar alguna configuración de seguridad oscura para que no sea ideal:

http://forum.xda-developers.com/showthread.php?p=51535568

Edición 2: Google ha cambiado esto nuevamente en Android "L". Supongo que se dieron cuenta de que RemoteControlClient era demasiado complicado.


KeyEvent no funciona correctamente en las nuevas versiones de Android, y tampoco es compatible con aplicaciones como Spotify. La mejor solución es utilizar MediaController . Para cada aplicación que se esté reproduciendo actualmente y desee controlarla, debe crear un MediaController diferente. Requiere Context y MediaSession.Token. El token ''identifica'' el proceso que reproduce la música. Por ejemplo, si jugaste Google Play Music y ahora juegas a Spotify, puedes crear MediaControllers para ambos. ¿Cómo retirar fichas? Hay dos maneras:

  • Obtener la lista de MediaSessionManager . Puedes encontrarlo en el proyecto de ejemplo de Google.
  • Obtenlo de Notificaciones: si tienes acceso a Notificaciones (NotificationListenerService) puedes buscar notificaciones de aplicaciones de música y obtener su token actual.

Usted verifica el estado actual de la sesión desde MediaController:

getPlaybackState().getState() //e.g. PlaybackStateCompat.STATE_PLAYING

y control de la aplicación utilizando controles de transporte, por ejemplo:

getTransportControls().skipToNext()

Dependiendo de su minSDK use Compat o no version. Puedes lanzar MediaSession.Token a MediaSessionCompat.Token con:

MediaSessionCompat.Token.fromToken(token)


Parece que los métodos KeyEvent referenciados no me funcionan en el último SDK. Usar el método dispatchMediaKeyEvent () de AudioManager con un KeyEvent definido funcionó para mí.

Ver: here

Ejemplo de código:

this.mAudioManager = (AudioManager) this.context.getSystemService(Context.AUDIO_SERVICE); long eventtime = SystemClock.uptimeMillis(); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0); mAudioManager.dispatchMediaKeyEvent(downEvent); KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT, 0); mAudioManager.dispatchMediaKeyEvent(upEvent);


Si desea controlar el reproductor de música (el que se está reproduciendo actualmente), hay una manera de enviarle KeyEvents:

if (mAudioManager == null) mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE); KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY); mAudioManager.dispatchMediaKeyEvent(event);

Esta es una forma más segura, ya que generalmente la clave de transmisiónEvent puede causar que juegue más de un jugador a la vez.

Nota: necesita tener minSdk 19 o más.


AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); if(mAudioManager.isMusicActive()) { Intent i = new Intent(SERVICECMD); i.putExtra(CMDNAME , CMDSTOP ); YourApplicationClass.this.sendBroadcast(i); }

puede obtener el audiomanager y luego enviar comandos a él.

estos son los comandos

public static final String CMDTOGGLEPAUSE = "togglepause"; public static final String CMDPAUSE = "pause"; public static final String CMDPREVIOUS = "previous"; public static final String CMDNEXT = "next"; public static final String SERVICECMD = "com.android.music.musicservicecommand"; public static final String CMDNAME = "command"; public static final String CMDSTOP = "stop";