2016-03-22 5 views
2

Ich möchte mehrere Bilder aus dem Anwendungspaketverzeichnis freigeben. Meine Dateien befinden sich im folgenden Pfad wie. /data/data/com.example. Jetzt kann ich Bilderpfad erhalten. Aber keine Bilder an die Anwendung zum Teilen anhängen. So wie App, Message und Facebook etc. Ich habe eine Permission in Manifest-Datei implementiert. Siehe unten mein Versuch.Android: Wie teile ich Bilder aus dem Paketverzeichnis?

  Intent intent = new Intent(Intent.ACTION_SEND); 
      intent.setType("image/*"); 
      intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(saveList.get(0).toString()))); 
      startActivity(Intent.createChooser(intent, "Share")); 
      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_SEND_MULTIPLE); 
      intent.putExtra(Intent.EXTRA_SUBJECT, "Here are some files."); 
      intent.setType("image/*"); /* This example is sharing jpeg images. */ 
      ArrayList<Uri> files = new ArrayList<Uri>(); 
      for(String path : saveList /* List of the files you want to send */) { 
       File file = new File(path); 
       Uri uri = Uri.fromFile(file); 
       files.add(uri); 
      } 

      intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files); 
      startActivity(intent); 

Implementierte Berechtigung ist unten.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Suchen Sie ein wenig, das wurde zuvor beantwortet. Sie müssen einen 'ContentProvider 'implementieren, um jeder anderen App Zugriff auf Dateien in Ihrem privaten Ordner zu gewähren. – 323go

+0

Werfen Sie einen Blick: http://StackOverflow.com/A/30172585/1944896 – TheLittleNaruto

Antwort

0

Zuerst Uri.fromFile() wird in Ihrem Fall nicht funktioniert, weil Drittanbieter-Anwendungen keinen Zugriff auf Ihre internal storage haben.

Zweitens mit einem file:Uri, wie aus Uri.fromFile(), scheint, als ob it will be banned in the next version of Android.

Stattdessen müssen Sie some sort of ContentProvider, such as FileProvider verwenden, um die Dateien für Anwendungen von Drittanbietern verfügbar zu machen. Dies ist in the documentation abgedeckt.

+0

können Sie einige Code dafür? –

+0

@RaviVaghela: [Diese Beispiel-App] (https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/V4FileProvider) zeigt 'FileProvider', allerdings für' ACTION_VIEW', nicht 'ACTION_SEND'. – CommonsWare

+0

Meine Frage ist, ich möchte Bild von Anwendungspaketordner wie '/ data/data/com.example/image/image1.jpg' dieses Typs freigeben. Ich bin Speicherbild im Paketordner, den ich es für das Anteilbild benötige, das ich in der Bildansicht zeigen kann, aber nicht teile. @CommonsWare –