2011-01-29 20 views
6

Bu yanıt zaten yapılmışsa özür dileriz - eğer birisi beni zaten cevaplanmış bir soruya yönlendirebilirse, bu harika olurdu ...Android'de, dosya türüne göre bir uygulama seçiciyi nasıl görüntüleyebilirim?

Çok basit bir şekilde, uygulamaların bir listesini açabilmek istiyorum. belirli bir türdeki bir dosyayı işleyebilir - örneğin, bir müzik dosyam varsa (mp3, ogg, neyse), dosyayı işleyebilen tüm yüklü medya uygulamalarının bir listesini görüntüleyebilir ve kullanıcı seçmek için.

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3"); 
startActivity(myIntent); 

ama her zaman çöker çünkü Açıkçası, bu yanlış ele verdik:

ben şöyle bunu yapmak için bir niyet oluşturma ile oynamak oldum. ACTION_VIEW yerine ACTION_PICK veya ACTION_CHOOSER kullanmalı mıyım?

Daha da önemlisi, tüm medya oynatıcılarını Intent.type dışında bir şeyle kolayca tanımlamak mümkün mü? Bunu seçiciyi görmek istiyorum varsayalım

Lütfen nazik ol :)

+0

Kimsenin bir yanıtı olup olmadığını görmek için (kısmi bir yanıt bile) ... – roryhewitt

+0

Benzer bir sorunla karşılaştım. Bir uygulama seçicisini almak için aşağıdaki çözümü kullandım: http://stackoverflow.com/questions/7635764/application-selection-dialog-based-on-filetype Bu çözüm ayrıca kendi iletişiminizi kurma ihtiyacını da ortadan kaldırıyor. – kaspermoerch

cevap

8

Verilen bir amacı başarılı bir şekilde açabilen uygulamaları almak için PackageManager'ı kullanırsınız. Amacı yukarıdaki gibi inşa edin ve daha sonra bu kodu kullanarak amacı gerçekleştirebilecek uygulamaları elde edin.

Bu, simge ve paket sözcüğü dahil olmak üzere, amacı gerçekleştirebilecek programlarla ilgili tüm bilgileri verecektir. Daha sonra bu seçeneklerle bir iletişim kutusu oluşturabilir ve kullanıcının seçtiği seçeneği kaydedebilirsiniz.

+0

"Yukarıdaki amaç" ile, @ sstn'nin kodunu kastediyorsunuz? Bu durumda, paket yöneticisi kodunuzu ** yerine startActivity()? – roryhewitt

+0

sağ. Sonra size ihtiyacınız olan tüm bilgileri verecektir. Kodu biraz temizleyeyim. –

+0

Bu harika görünüyor! Asılı uygun bir iletişim kutusu için herhangi bir kodun olduğunu sanmıyorum, değil mi? Yoksa kendi 'standart' olanı mı yaratırım? – roryhewitt

1

... Ben tip küçük harflerle uygun bir MIME türü, olması gerektiğine inanıyoruz, ama bu durumda ne kullandığınızdan emin değilim Bir dosyayı (veya URL) açarsanız ve işlemek için kayıtlı birden fazla uygulama varsa iletişim kutusu mu? Örneğin. youtube URL'si açar ve youtube oynatıcısını veya tarayıcısını kullanmayı seçebilir misiniz? niyet türüdür

sistemi I (dosya tarayıcısı üzerinden) bir görüntüyü açmak istediğinizde gönderir:

File f = new File("/sdcard/IMG_0114.JPG"); 
Uri uri = Uri.fromFile(f); 

Intent i = new Intent(Intent.ACTION_VIEW); 
// use setDataAndType() - setData() and setType() cancel each other 
i.setDataAndType(uri, "image/jpeg"); 
i.putExtra("preview", false); 
i.putExtra("key_filename", "/sdcard/IMG_0114.JPG"); 
i.putExtra(Intent.EXTRA_STREAM, uri); 
i.putExtra("sort_order", 0); 

// It's one of the flag combinations: 
i.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | 
     Intent.FLAG_ACTIVITY_MULTIPLE_TASK | 
     Intent.FLAG_DEBUG_LOG_RESOLUTION); 

startActivity(i); 

DÜZENLEME: bir çalışma (minimal) çözüm elde etmek kod düzeltildi.

Ek verilerin hangi alanlarının ayarlanacağından emin değilim - bunun için belge bulamadı.

+0

Seçici diyaloğunu görmek istediğim doğru. Ancak, aslında dosyayı açmak istemiyorum (aslında, belirli bir dosyaya sahip olamayacağım) - Bu dosyayı açmak için kullanılacak yöntemi geri döndürmek istiyorum. – roryhewitt

+0

Temel olarak, bir dosya ** türü ** için bir seçici açılır ve sonra (benim uygulamada) seçilen uygulamanın adını kaydedebilirsiniz. bu mantıklı mı? – roryhewitt

İlgili konular