【发布时间】:2019-12-16 07:58:48
【问题描述】:
编辑:Facebook 问题:https://developers.facebook.com/support/bugs/2434932356771915/
我正在尝试将位图分享到 Instagram 故事贴纸。 但它会加载 Instagram,但没有显示任何贴纸,没有背景颜色,只有黑色故事屏幕。 这段代码有什么问题?我检查文件是否在外部数据缓存目录中,这很好。
根据Facebook's Instagram documentation:
-
我在我的 AndroidManifest.xml 中添加了对存储和提供程序的读/写权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <provider android:authorities="my.app.id.fileprovider" android:name="androidx.core.content.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> -
我添加了一个 file_paths.xml 以将我的外部缓存文件夹共享给其他应用程序
<?xml version="1.0" encoding="utf-8"?> <resources> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-cache-path name="share" path="."/> </paths> </resources> -
我从可绘制对象创建位图,将其写入外部缓存目录中的文件,然后应用文档中的 Intent 示例
public static void sendStickerToInstagram() { Bitmap bm = BitmapFactory.decodeResource(context.getResources(), R.drawable.sticker); File extStorageDirectory = context.getExternalCacheDir(); File stickerFile = new File(extStorageDirectory, "sticker.png"); try { FileOutputStream outStream = new FileOutputStream(stickerFile); bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); outStream.flush(); outStream.close(); } catch (IOException e) { Log.e("TEST", e.getMessage()); } Uri stickerUri = FileProvider.getUriForFile(activity, "my.app.id.fileprovider", stickerFile); // Uri stickerUri = Uri.fromFile(stickerFile); String linkUrl = "https://stackoverflow.com"; Intent intent = new Intent("com.instagram.share.ADD_TO_STORY"); intent.setType("image/*"); intent.putExtra("interactive_asset_uri", stickerUri); intent.putExtra("content_url", linkUrl); intent.putExtra("top_background_color", "#33FF33"); intent.putExtra("bottom_background_color", "#FF00FF"); grantUriPermission("com.instagram.android", stickerUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); if (getPackageManager().resolveActivity(intent, 0) != null) { startActivityForResult(intent, 0); } }
最奇怪的部分是当我测试将我的贴纸作为背景分享时,它可以正常工作,因此文件以所有权限加载。
Intent intent = new Intent("com.instagram.share.ADD_TO_STORY");
intent.setDataAndType(stickerUri, "image/*");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra("content_url", linkUrl);
if (activity.getPackageManager().resolveActivity(intent, 0) != null) {
activity.startActivityForResult(intent, 0);
}
知道为什么我不能分享贴纸吗?
【问题讨论】:
标签: java android android-intent instagram