2017-09-11 4 views
0

Ich habe den folgenden Code implementiert Video zu teilen:Warum verhält sich ACTION_SEND nicht wie die Freigabe-Schaltfläche der Galerie?

// Copy video file to Fileprovider directory. 
final String destFile = … 

// Build FileProvider uri. 
final Uri uri = FileProvider.getUriForFile(activity, AUTHORITY, destFile) 

Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_STREAM, uri); 
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
sendIntent.setType("video/*"); 
Log.d(TAG, "Sharing " + sendIntent.getType() + " for " + uri); 

String title = "Share this content with"; 
Intent chooser = Intent.createChooser(sendIntent, title); 

if (null != sendIntent.resolveActivity(activity.getPackageManager())) { 
    activity.startActivity(chooser); 
} 

Dieser Code funktioniert und zeigt die Auswahl. Wenn ich eine Messaging-App wie Telegram auswähle, kann ich die Zielkonversation auswählen, aber das Video wird als Dateianlage gesendet, was bedeutet, dass Benutzer nur ein Dokumentsymbol sehen und es herunterladen und extern öffnen müssen. Das gleiche Video, das die OS-Systemgalerie verwendet, öffnet jedoch Telegram in ihren Videoeditor, wo sie die Medien schneiden/bearbeiten können und wenn sie gesendet werden, sind sie in der Konversation sichtbar.

Was fehlt mir, um das gleiche Verhalten zu erhalten? Beim Durchsehen von Android-Git-Repositories sehe ich nichts anderes, um Inhalte zu teilen, also weiß ich nicht, was mir fehlt. Das Protokoll ich mit diesem Code erhalten sieht aus wie

Sharing video/* for content://com.app.android.fileprovider/share/video-a.mp4 

Also nicht nur, dass es den Mime-Typen, sondern auch die Dateierweiterung helfen könnte. Wenn ich den Code ändere, um einen anderen Mime-Typ für Bilder zu verwenden, dann bekomme ich das gleiche Verhalten, wo die Bilder in den Chat von Telegram eingebunden werden.

+0

Verwenden Sie LogCat, um zu sehen, welche "Absicht" die "OS-Systemgalerie" verwendet. Bitte beachten Sie, dass es keine "OS Systemgalerie" gibt; Auf Android-Geräten sind Dutzende, wenn nicht Hunderte, verschiedener Galerie-Apps vorinstalliert, andere stehen zum Download bereit. – CommonsWare

+0

Die Absicht ist die gleiche '{act = android.intent.action.SEND typ = video/* flg = 0xb080001cmp = org.telegra m.messenger/org.telegram.ui.LaunchActivity (hat Clip) (hat Extras)} ', mit dem gleichen Mime-Typ. –

Antwort

0

Aus irgendeinem Grund war der Schuldige der FileProvider. Sobald ich die FileProvider entfernte und direkt file:// URIs ging, funktioniert alles.

+0

Es funktioniert nicht mit Android 7.0+, wo das 'file' Schema effektiv verboten ist. Bitte beachten Sie, dass Sie Ihrem Inhalt nur Lesezugriff auf Telegram gewährt haben. Es ist daher unklar, was Sie von Telegram in Bezug auf die Bearbeitung des Videos erwarten. – CommonsWare

+0

Targeting sdk 22 scheint im Emulator zu funktionieren. –

+0

Ja, bis du deine "targetSdkVersion" auf 24 oder höher erhöhst. – CommonsWare

Verwandte Themen