3

Je développe ma première application Android . C'est l'application d'enregistrement vocal. J'enregistrer la voix avec MediaRecord comme ceci:Lancement de Media Player en utilisant l'intention

mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setOutputFile(mFileName); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     try { 
      mRecorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 

     mRecorder.start(); 

et moi avons une autre activité pour la lecture de ces des voix enregistrées (.3gpp fichiers). Dans cette activité, il y a un ListView contenant mes voix enregistrées. Je veux jouer du son avec n'importe quel lecteur de musique installé sur le téléphone. Voici mon code: (Source pour ce code: https://stackoverflow.com/a/3367231/556169)

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

Mais je reçois une erreur "lecteur de musique ne peut pas jouer ce type de média".

Lorsque je parcours ces fichiers audio et les restitue via mon explorateur de fichiers, ça fonctionne parfaitement (c'est méchant, je suis en train d'enregistrer des voix, avec succès). Mais quand j'utilise Intent dans mon application, je reçois une erreur.

SUPPLEMENTAIRE Je ne peux pas utiliser MediaStore.INTENT_ACTION_MUSIC_PLAYER parce qu'il est dépréciée. Je ne peux pas utiliser Intent.CATEGORY_APP_MUSIC car il nécessite min API lvl 15. Le niveau d'API minimal de mon projet doit être 8.

Répondre

5

Je pense que la meilleure option est d'utiliser une activité de choix, où l'utilisateur peut choisir son lecteur multimédia préféré. En passant, cette façon de passer le nom du fichier me semble un peu bizarre. Je considérerais le changer.

Je ne suis pas sûr, mais vous devriez pouvoir voir votre propre joueur dans le sélecteur si vous déclarez les filtres d'intention correspondants.

2

Vous pouvez toujours utiliser l'intention dépréciée pour cibler des niveaux d'API inférieurs à 15, puis utiliser la nouvelle intention pour cibler les niveaux d'API les plus récents. Pour ce faire, il suffit d'utiliser un chèque dans votre code comme suit:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { 
    // use the [MediaStore.INTENT_ACTION_MUSIC_PLAYER] intent 
} 
else { 
    // use the [Intent.CATEGORY_APP_MUSIC] intent 
} 

Assurez-vous que votre TargetAPI est de 15 ou plus; votre MinAPI peut être 8.

+0

Je l'ai essayé hier, il y a des problèmes. Sur Galaxy Note 2 (Android 4.1.2), j'obtiens 'Aucune activité trouvée pour gérer Intent {act = android.intent.category.APP_MUSIC dat = fichier: ///audiorecordtest20130612145343.3gp typ = audio/*}'. Et sur Galaxy S2 (Android 4.1.2), mon lecteur de musique se lance, puis s'éteint soudainement. – Eray

+0

'' – Eray

+0

Cela semble être un problème avec certains appareils Samsung n'enregistrant pas correctement leur lecteur de musique. Voir [ici] (http://stackoverflow.com/questions/12532207/open-music-player-on-galaxy-s3) pour plus d'informations. – free3dom