2015-10-08 23 views
5

Android M'deki diğer uygulamalara veri paylaşmak, yalnızca diğer uygulama READ_EXTERNAL_STORAGE iznine manüel olarak sorduğunda mümkün görünüyor, ve kimsenin bu konuda bir yolunu bilip bilmediğini merak ediyorum Paylaşımda bulunabileceğim tüm uygulamaları manuel olarak açıp Depolama izni'ni seçerek. ÖrneğinVerileri diğer uygulamalarla paylaşırken Android M izinleri

Bazı verileri paylaşmak için aşağıdaki Niyet var:

Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType("image/*"); 
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Some Image Subject"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(someFile)); 
    startActivity(Intent.createChooser(shareIntent, "Share via...")); 

someFile var ve ben zaten önerilen Süre İzin modeli http://developer.android.com/training/permissions/requesting.html de önerdi ve kullanıcı benim İzni izin vermeyi kabul etti takip ettim olduğunu varsayalım, Dosya aslında sistemde oluşturuldu.

Paylaştığım Uygulamayı anlatmanın bir yolu var mı, bu izni kullanıcıya verdiğim için bunu sizin adınıza verebilir misiniz?

Bu işe yaramazsa:

shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

belgelerine göre: ilgili okuma işlemleri gerçekleştirmek için

int FLAG_GRANT_READ_URI_PERMISSION

seti, bu Niyet alıcı verilecek izin Intent'in verisindeki URI ve ClipData'da belirtilen herhangi bir URI.

Daha da ilginç Atanmamışsa ve ben Gmail'e paylaşmak ise, bayrak algılanmıyor ve Google izin talep etmek isteyecek ziyade sadece İstisna yakalar ve benim dosya eklemek gelmez gelmez.

Herhangi bir yardım için teşekkür ederiz.

+0

Hi

Uri uri = FileProvider.getUriForFile(context, "com.mydomain.fileprovider", file); 

daha fazla bilgi. Çözümü henüz buldunuz mu? Benzer bir hatayla karşı karşıyayım. Videoyu Youtube’a paylaşmak istiyorum. Ve Youtube SecurityException ile çöküyor: izin reddi. READ_EXTERNAL_STORAGE izni veya izin izni gerektirir. – TOP

cevap

2

Dosyaları, bir FileProvider kurarak paylaşabilirsiniz.

böyle AndroidManifest bunu tanımlayın: authorities keyfi bir isimdir

<manifest> 
    ... 
    <application> 
     ... 
     <provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="com.mydomain.fileprovider" 
      android:exported="false" 
      android:grantUriPermissions="true"> 
      ... 
      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/file_provider_paths" /> 
     </provider> 
     ... 
    </application> 
</manifest> 

; daha sonra paylaşmak istediğiniz dosyaların yollarını tanımladığınız bir xml dosyası oluşturun. Eğer harici depolama bulunan bir dosyayı paylaşmak istiyorsanız Örneğin, file_provider_paths.xml dosyası aşağıdaki gibi görünecektir:

<paths> 
    <external-path name="share_image" path="/MYAppFolder/Images/" /> 
</paths> 

Ardından istediğiniz dosyaların içeriği uri almak için FileProvider kullanmak payı: docs

+0

Haklısın, kötüyüm. – Romain

+0

Bu cevap neden reddedildi? – Krystian

+0

Birinin duygu eksikliği yüzünden sanırım –

İlgili konular