要为Instagram故事分享贴纸坏了吗?

时间:2019-12-16 07:58:48

标签: 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);
    }

知道为什么我不能分享贴纸吗?

1 个答案:

答案 0 :(得分:2)

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

他们最近在Android上发布的Instagram打破了  com.instagram.share.ADD_TO_STORY的意图。  密切关注此线程以进行更新。

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