2012-08-13 21 views
10

En mi aplicación, quiero hacer un selector que ofrezca al usuario la opción de elegir una música. Quiero usar el selector nativo de Android. He utilizado el siguiente código para abrir el nativo de Android selector de música:¿Cómo abrir selector de música?

final Intent intent2 = new Intent(Intent.ACTION_PICK); 
intent2.setType("audio/*"); 
startActivityForResult(intent2, 1); 

Pero cuando ejecuto, me sale un ActivityNotFoundException y este mensaje de error:

"El teléfono no tiene ninguna galería de música que se puede utilizar para seleccionar un archivo. Intente enviar un tipo diferente de archivos "

¿Estoy haciendo algo mal allí?

Respuesta

13

Esto funcionó bien para mí:.

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(i,1); 

La intención más general con Intent.ACTION_GET_CONTENT puede presentarle al usuario varias opciones de actividades para elegir un archivo de audio (administrador de archivos Astro, etc.). Sin embargo, el usuario podría seleccionar cualquier archivo, no necesariamente un archivo de audio Quería uno que simplemente permitiera al usuario seleccionar un archivo de audio de sus medios. Esto lo hizo.

+0

Excelente, por favor dé un ejemplo para el archivo que almacena –

+0

vea el ejemplo completo aquí: http://sudhanshuvinodgupta.blogspot.co.il/2012/07/using-intentactionpick.html – Guy

+0

'Intent.ACTION_GET_CONTENT' es realmente un buen selector ... incluso me permite abrir un archivo en mi OneDrive. En comparación, el 'ACTION_PICK' de' Media.EXTERNAL_CONTENT_URI' es más conciso ... ** pregunta: ** con el método ACTION_PICK, ¿cómo es posible preseleccionar el elemento seleccionado actualmente? (Muestra el selector sin nada ya seleccionado) –

0

Algo a lo largo de las líneas de esto puede funcionar

// some Intent that points to whatever you like to play 
Intent play = new Intent(Intent.ACTION_VIEW); 
play.setData(Uri.fromFile(new File("/path/to/file"))); 
// create chooser for that intent 
try { 
    Intent i = Intent.createChooser(play, "Play Music"); 
    c.startActivity(i); 
} catch(ActivityNotFoundException ex) { 
    // if no app handles it, do nothing 
} 
4

Si se echa un vistazo en el archivo AndroidManifest.xml para la última aplicación de música núcleo, puede arrojar alguna luz sobre las opciones que tiene. Por ejemplo:

<activity android:name="com.android.music.MusicPicker" 
     android:label="@string/music_picker_title" android:exported="true" > 
    <!-- First way to invoke us: someone asks to get content of 
     any of the audio types we support. --> 
    <intent-filter> 
     <action android:name="android.intent.action.GET_CONTENT" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.OPENABLE" /> 
     <data android:mimeType="audio/*"/> 
     <data android:mimeType="application/ogg"/> 
     <data android:mimeType="application/x-ogg"/> 
    </intent-filter> 
    <!-- Second way to invoke us: someone asks to pick an item from 
     some media Uri. --> 
    <intent-filter> 
     <action android:name="android.intent.action.PICK" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.OPENABLE" /> 
     <data android:mimeType="vnd.android.cursor.dir/audio"/> 
    </intent-filter> 
</activity> 

Así que basado en esto, puede que intente primero

final Intent intent2 = new Intent(Intent.ACTION_GET_CONTENT); 
intent2.setType("audio/*"); 
startActivityForResult(intent2, 1); 

y ver si se ajusta a sus necesidades. También puede mirar a la adición de la categoría banderas indicadas en el ejemplo anterior para ayudar a reducir los resultados (por ejemplo OPENABLE debe filtrar a sólo el contenido que se puede abrir como una corriente

Cuestiones relacionadas