2012-08-13 27 views
10

Uygulamamda, kullanıcıya müzik seçme seçeneği sunan bir seçim yapmak istiyorum. Yerel android seçiciyi kullanmak istiyorum. Ben yerli robot müzik seçiciyi açmak için aşağıdaki kodu kullanılır:Müzik seçici nasıl açılır?

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

Ama bunu yürütmek, ben bir ActivityNotFoundException ve bu hata mesajını alıyorum:

"Telefonunuz kullanılabilir hiçbir müzik galerisi var Bir dosya seçmek için Lütfen farklı bir dosya türünü göndermeyi deneyin. "

Burada yanlış bir şey mi yapıyorum? En son çekirdek Müzik uygulaması için AndroidManifest.xml dosyasına bir göz atacak olursak bu çizgisinde

cevap

13

Bu benim için iyi çalıştı.

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

Intent.ACTION_GET_CONTENT ile olan genel niyet, kullanıcıyı bir ses dosyası (Astro dosya yöneticisi, vb.) Seçmek için bir dizi seçenekle birlikte sunabilir.Ancak kullanıcı, bir ses dosyasını değil, herhangi bir dosyayı seçebilir. Kullanıcının kendi medyalarından bir ses dosyası seçmesine izin vermesini istedim.Tu hile yaptı ..

+0

Mükemmel, lütfen –

+0

dosyasını saklamak için bir örnek verin: http://sudhanshuvinodgupta.blogspot.co.il/2012/07/using-intentactionpick.html – Guy

+0

'Intent.ACTION_GET_CONTENT' gerçekten hoş bir seçimdir ... OneDrive'ım üzerinde bir dosya açmama bile izin veriyor. Karşılaştırmada, ACTION_PICK yöntemiyle "Seçili öğenin önceden seçilmesi nasıl mümkündür?" Sorusu daha da basittir: ** Media.EXTERNAL_CONTENT_URI ifadesinin "ACTION_PICK" öğesi daha kısa ... (Seçiciyi hiç seçilmemiş bir şekilde gösterir) –

0

şey

// 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

çalışabilir, bu tür seçeneklere sahip biraz ışık tutabilir. Örneğin:

<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> 

Yani bu dayalı, önce

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

deneyebilir ve sizin ihtiyaçlarınıza uygun görebilirsiniz. Ayrıca akışı olarak açılabilir tek içeriğe filtre edilmelidir (sonuçlar örneğin OPENABLE daraltmak yardımcı olmak için yukarıdaki örnekte belirtildiği kategori bayrakları ekleyerek bakabiliriz

İlgili konular