Instagram 的视频分享 Android Intent
Instagram's video sharing Android Intent
以下 Instagram's video sharing Android Intent. Trivial edit to bypass a chooser and launch Instagram directly. See Gist 相关代码和 adb 输出。
Kit Kat 设备按预期工作,但 Nougat 设备掉到第 20 行,启动 Play 商店,就好像 Instagram 没有安装一样。
在这两种设备上,ShareDialog 的 startInstagram() 的第 14 行确实提供了视频共享应用程序的选择器,包括 Instagram。
使用相同方法共享图像的相关代码在两种设备上都能正常工作。
更新 1:实施新的 ContentProvider 方法会使 Instagram 在启动共享 Intent 时崩溃。我会测试将视频分享到另一个社交网络,看看是否可行。
更新 2:事实证明 Instagram 不适合
share.setDataAndType(contentUri, "video/*");
.
分开设置,一切正常。
share.setType("video/*");
share.putExtra(Intent.EXTRA_STREAM, contentUri);
那似乎是 FileUriExposedException
。如果您的 targetSdkVersion
为 24 或更高,则不能在 Intent
或其他地方(例如 setSound()
在`通知上)。
使用 FileProvider
通过 ContentProvider
提供您的文件。
在Android牛轧糖上记录你的要点异常揭示了问题:
android.os.FileUriExposedException: file:///storage/emulated/0/test.mp4 exposed beyond app through ClipData.Item.getUri()
在 Android 牛轧糖上,您需要使用供应商:
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);
}
参见:
以下 Instagram's video sharing Android Intent. Trivial edit to bypass a chooser and launch Instagram directly. See Gist 相关代码和 adb 输出。
Kit Kat 设备按预期工作,但 Nougat 设备掉到第 20 行,启动 Play 商店,就好像 Instagram 没有安装一样。
在这两种设备上,ShareDialog 的 startInstagram() 的第 14 行确实提供了视频共享应用程序的选择器,包括 Instagram。
使用相同方法共享图像的相关代码在两种设备上都能正常工作。
更新 1:实施新的 ContentProvider 方法会使 Instagram 在启动共享 Intent 时崩溃。我会测试将视频分享到另一个社交网络,看看是否可行。
更新 2:事实证明 Instagram 不适合
share.setDataAndType(contentUri, "video/*");
.
分开设置,一切正常。
share.setType("video/*");
share.putExtra(Intent.EXTRA_STREAM, contentUri);
那似乎是 FileUriExposedException
。如果您的 targetSdkVersion
为 24 或更高,则不能在 Intent
或其他地方(例如 setSound()
在`通知上)。
使用 FileProvider
通过 ContentProvider
提供您的文件。
在Android牛轧糖上记录你的要点异常揭示了问题:
android.os.FileUriExposedException: file:///storage/emulated/0/test.mp4 exposed beyond app through ClipData.Item.getUri()
在 Android 牛轧糖上,您需要使用供应商:
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);
}
参见: