2015-06-19 25 views
5

La mia app mostra l'elenco dei brani dalla scheda SD. Voglio essere in grado di riprodurre la canzone sul lettore predefinito. Ho tutti i dati relativi alla canzone: id, titolo, album, artista, percorso ...Riproduci brano su lettore musicale predefinito - android

C'è un modo per avviare il lettore predefinito per riprodurre il brano?

che cosa ho provato:

  1. Utilizzando Intent.CATEGORY_APP_MUSIC. Posso avviare il lettore predefinito, ma non posso impostare la canzone. Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_MUSIC) apre l'app musica predefinita. Tuttavia, intent.setData(Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)) genera un'eccezione non trovata.

  2. Utilizzo deprecato MediaStore.INTENT_ACTION_MUSIC_PLAYER. Attività non trovata. Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER).setDataAndType(Uri.fromFile(songFile), "audio/*")

  3. Utilizzo di INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH. Avvia la ricerca, ma non la canzone, dice che non è stato possibile preparare mix su Play music. Tuttavia, ora funziona da Google, quindi potrebbe essere la chiave. Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).putExtra(SearchManager.QUERY, name)
  4. Utilizzo di ACTION_VIEW. funziona ma lancia una versione compatta del lettore, e voglio il giocatore completo.

compat view

Nota: voglio lanciare player esterno, non nella mia app.

Aggiornamento: Sembra Google Now hardoded Play Music e supporto Youtube.

+0

Eventuali duplicati di [Android lanciare lettore musicale con l'intento] (h ttp: //stackoverflow.com/questions/3114471/android-launching-music-player-using-intent) –

+0

In realtà no, voglio avviare una canzone specifica, non solo un lettore musicale. –

+0

Trovate le risposte> –

risposta

0

Prova con qualcosa di semplice come questo:

MediaPlayer mp = new MediaPlayer();  
mp.setLooping(true); 
try { 
    mp.setDataSource(mFile); //mFile is the path to your mp3 file 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
try { 
    mp.prepare(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
mp.start(); 

E un altro esempio con MadiaPlayer e file salvato nella directory/res/raw:

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1); 
mediaPlayer.start(); // no need to call prepare(); create() does that for you 

Ulteriori informazioni: http://developer.android.com/guide/topics/media/mediaplayer.html

+0

** Nota **: desidero avviare ** Lettore esterno **, non nella mia app. –

+0

Hmmm, così hai provato con questa selezionata come migliore risposta qui http://stackoverflow.com/questions/3114471/android-launching-music-player-using-intent? –

+0

Sì, avvia una versione compatta per giocare solo e non l'intero client. –

0
Intent musicIntent = new Intent(); 
//use Action VIEW to launch app 
musicIntent.setAction(Intent.ACTION_VIEW);  

String mimeType = getMimeTypeFromFile(); // in your case it is audio 
Uri uri = " yourfile uri"; 
musicIntent.setDataAndType(uri,mimeType); 
startActivity(intent); 

L'applicazione di visualizzazione predefinita verrà aperta se il tipo mime è cambiato, per video mime-type vid verrà aperto il lettore eo, per il lettore musicale audio e per la galleria di immagini.

Se ci sono più lettori, verrà aperta l'attività Resolver.

Non dimenticare di prendere ActivityNotFoundException

lettore musicale per ACTION_VIEW AudioPreview activty viene chiamata con priorità. ci sono altre attività che gestiscono questa azione, basta controllare una volta con l'azione "com.android.music.PLAYBACK_VIEWER" invece di ACTION_VIEW o con esso.

+0

Come questo è diverso dalla soluzione 4 sulla mia domanda? –

+0

controllare AndroidManifest.xl di Music app, è possibile ottenere il codice da AndroidXRef –

+0

android.content.ActivityNotFoundException: Nessuna attività trovata per gestire Intent {act = com.android.music.PLAYBACK_VIEWER dat = content: // media/external/audio/media/2797 typ = audio/*} –

3

Se si desidera avviare il lettore app musicale di default sul dispositivo, dovrebbe provare questo:

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
File file = new File(YOUR_SONG_URI); 
intent.setDataAndType(Uri.fromFile(file), "audio/*"); 
startActivity(intent); 
+0

Avvia la versione compatta del lettore musicale predefinito, vedere l'immagine nella domanda aggiornata –

+0

ah, scusate, mi manca capirvi! – Karoly

+0

Va bene, è la soluzione più vicina. –

0

il lancio di una versione compatta per la riproduzione di quella app ha implementato in questo modo, è possibile trovare molti 3rd app partito che aprire l'applicazione completa con

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
File file = new File(YOUR_SONG_URI); 
intent.setDataAndType(Uri.fromFile(file), "audio/*"); 
startActivity(intent); 

come già provato questo