私はビデオを共有するために、次のコードを実装している:ACTION_SENDがギャラリーの共有ボタンのように動作しないのはなぜですか?
// 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);
}
このコードは動作し、チューを示しています。テレグラムのようなメッセージングアプリを選択すると、相手の会話を選択することになりますが、ビデオは添付ファイルとして送信されます。つまり、ユーザーはドキュメントアイコンしか表示せず、ダウンロードして外部から開く必要があります。ただし、OSのシステムギャラリーを使用している同じビデオでは、テレグラムをビデオエディタに開いてメディアをカット/編集し、送信されたときに会話にインラインで表示されます。
同じ動作をするには、何が欠けていますか? Androidのgitリポジトリを見れば、これとは別のコンテンツは表示されないので、私は何が欠けているのかわかりません。このコードで取得できるログは次のようになります
Sharing video/* for content://com.app.android.fileprovider/share/video-a.mp4
これはMIMEタイプを持っているだけでなく、ファイル拡張子が役に立ちます。画像に異なるMIMEタイプを使用するようにコードを変更すると、画像がテレグラムのチャットにインライン展開されるのと同じ動作になります。
LogCatを使用して、「OSシステムギャラリー」が使用している「インテント」が何であるかを確認します。 「OSシステムギャラリー」はありません。 Android搭載端末にあらかじめインストールされている数多くのギャラリーアプリやダウンロード可能なものが数多くあります。 – CommonsWare
インテントは同じです '{act = android.intent.action.SEND typ = video/* flg = 0xb080001 cmp = org.telegra.m.messenger/org.telegram.ui.LaunchActivity(クリップあり)(補足あり)} '、同じMIMEタイプを使用します。 –