2016-11-17 1 views
1

次はInstagram's video sharing Android Intentです。 ChooserをバイパスしてInstagramを直接起動するための簡単な編集。関連コードとadb出力のSee GistInstagramさんのビデオ共有Androidの意図

Kit Katデバイスは意図したとおりに動作しますが、NougatデバイスはInstagramがインストールされていないかのようにPlayストアを起動するLine#20になります。

両方のデバイスで、ShareDialogのstartInstagram()の行番号14は、Instagramを含むビデオ共有可能なアプリケーションのセレクタを表示します。

この同じアプローチで画像を共有するための関連コードは、両方のデバイスで意図したとおりに動作します。

UPDATE 1:新しいContentProviderアプローチを実装すると、共有インテントを起動するとInstagramがクラッシュします。別のソーシャルネットワークにビデオを共有してテストすることで、それが機能するかどうかを確認します。

UPDATE 2:Instagramのは

share.setDataAndType(contentUri, "video/*");で素晴らしいプレーしませんが判明。

これらを別々に設定する場合は、すべてを正常に実行してください。 FileUriExposedExceptionあるように思われる

share.setType("video/*"); share.putExtra(Intent.EXTRA_STREAM, contentUri);

+0

Android 7.0で取得した「例外」を見たとき、何を学びましたか? – CommonsWare

+0

'E/ShareDialog:e.getLocalizedMessage >> file:///storage/emulated/0/870_90.mp4 ClipData.Item.getUri()によってアプリケーションを超えて公開 E/ShareDialog:e.getCause >> null' – es0329

答えて

1

は、問題を明らかに:

android.os.FileUriExposedException:ファイル:///storage/emulated/0/test.mp4はClipData.Itemを通じてアプリから露出しますAndroidのヌガーオン.getUri()

あなたは、プロバイダを使用する必要があります。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    Uri contentUri = FileProvider.getUriForFile(getContext(), "com.your.package.fileProvider", newFile); 
    intent.setDataAndType(contentUri, type); 
} 

参照:android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()

1

targetSdkVersionが24以上の場合は、Intentや他の場所(例えば、「通知」の場合はsetSound())にUri.fromFile()やその他のfileUriの値を使用することはできません。

FileProviderを使用してContentProviderでファイルを配信してください。 Androidのヌガーのご要旨の例外をログ

関連する問題