2014-12-19 25 views
9

Bir dosyayı açmak için Depolama Erişim Çerçevesinin bir parçası olarak sağlanan android sistem iletişim kutusunu kullanmak istiyorum. BenACTION_OPEN_DOCUMENT numaralı telefonla daha fazla sağlayıcı gösterme

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("application/pdf"); 
startActivityForResult(intent, EDIT_REQUEST); 

ile bunu ve daha sonra onActivityResult() iade URI'yı işlemek.

Sorun şu ki, sonuçta oluşan menüde beklediğimden çok daha az içerik sağlayıcısı alıyorum. Sadece Google Drive ve İndirmeler (aşağıdaki sol ekran görüntüsüne bakın). Dropbox, Solid Explorer, ... gibi diğerleri gösterilmez.

Bunun nedeninin, bu uygulamaların yalnızca bu listede görünmesi için gerekli olan amaç filtresini belirlemediğinden şüpheleniyorum. Ancak, diğer uygulamalar, örneğin, Kaiten Mail veya Chrome, sistem iletişim kutusunu listenin en üst kısmında tam olarak uygulanan içerik sağlayıcıları ile göstermeyi başarabilir ve ardından Dropbox ve Solid Explorer gibi diğerleri tarafından ince bir şekilde ayrılır. çubuğu (sağ ekran görüntüsüne bakın).

Bu davranışı nasıl alabilirim?

Comparison of the behavior I get (left) and the one I want (right)

+0

Eğer Kaiten Mail'in belge seçici çağırmak zaman LogCat nelerin görüneceğini bakın. Veya, [Uygulama Tarayıcı'yı yükleyin] (https://play.google.com/store/apps/details?id=com.japanesecrackers.appbrowser) ve diğer uygulamaların öğelerinde neler olduğunu görün seninkilerde eksik olabilir. Bunun "sistem diyaloğu" olduğundan ve "ACTION_OPEN_DOCUMENT" ile "ACTION_GET_CONTENT" sonuçların karıştırıldığı bir çalışma değil, emin misiniz? – CommonsWare

+3

[Kaynak kodu] 'na bakarak (https://code.google.com/p/chromium/codesearch#chromium/src/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java&q= Intent.CATEGORY_OPENABLE & sq = paket: Chrom (ium) paketinin krom ve tür = cs), bir kez sağ taraftaki davranışın göreceli olarak basit bir 'Intent.ACTION_GET_CONTENT' tarafından üretildiğini görebilir. Depolama erişim çerçevesinin ilk başta iyi bir fikrin, aslında neredeyse tüm uygulamalar tarafından bu kadar kötü bir şekilde desteklendiğini görmek çok üzücü… – cgogolin

+0

Örneğin, Dropbox'ın SAF uygulaması gerektiğini düşünüyorum. Bilgimle, bunu desteklemiyorlar. – powder366

cevap

2

Kullan 'ACTION_GET_CONTENT:

Intent intent = new Intent(Intent. ACTION_GET_CONTENT); 
intent.setType("application/pdf"); 
startActivityForResult(intent, EDIT_REQUEST); 
İlgili konular