2017-09-11 12 views
0

私はビデオを共有するために、次のコードを実装している: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タイプを使用するようにコードを変更すると、画像がテレグラムのチャットにインライン展開されるのと同じ動作になります。

+0

LogCatを使用して、「OSシステムギャラリー」が使用している「インテント」が何であるかを確認します。 「OSシステムギャラリー」はありません。 Android搭載端末にあらかじめインストールされている数多くのギャラリーアプリやダウンロード可能なものが数多くあります。 – CommonsWare

+0

インテントは同じです '{act = android.intent.action.SEND typ = video/* flg = 0xb080001 cmp = org.telegra.m.messenger/org.telegram.ui.LaunchActivity(クリップあり)(補足あり)} '、同じMIMEタイプを使用します。 –

答えて

0

なんらかの理由で、原因はFileProviderでした。 FileProviderを削除してから直接file:// URIを渡すとすべてが機能します。

+0

'file'スキームが効果的に禁止されているAndroid 7.0以降では動作しません。テレグラムにはコンテンツへの読み取りアクセス権しか与えられていないため、テレグラムがビデオの編集に関して何を期待しているのかは不明です。 – CommonsWare

+0

ターゲット設定sdk 22はエミュレータで動作するようです。 –

+0

はい、あなたが 'targetSdkVersion'を24以上に上げるまではそうです。 – CommonsWare

関連する問題