java - 分享 Instagram Story 的贴纸坏了?

标签 java android android-intent instagram

编辑: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);
    }

知道为什么我无法分享贴纸吗?

最佳答案

别担心...不是你。这是Instagram。 :P

他们最近在 Android 上发布的 Instagram 打破了 com.instagram.share.ADD_TO_STORY Intent 。 请密切关注此线程以获取更新。

https://developers.facebook.com/support/bugs/2434932356771915/

关于java - 分享 Instagram Story 的贴纸坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59352497/

相关文章:

android - 使用 InCallService 替换 Android 6 和 7 上的默认电话应用程序

java - 如何防止 Maven Java 中的文件从特定包导入

java - Spring MessageSource 多次解析/插入字符串

java - 查找 Java 枚举的最佳实践

android - 使用 Cordova 添加 android.permission.CAMERA

java - Android 应用程序不会显示在 Android Studio 模拟器中

java - 当我将本地主机站点转换为应用程序时出现空白屏幕

android - 无法将文件从驱动器共享到我的应用程序-android

android - 平均划分屏幕android

android - onActivityResult 执行两次