【问题标题】:Sharing text with image to instagram using android intent使用android意图将带有图像的文本共享到instagram
【发布时间】:2015-09-17 22:11:26
【问题描述】:

我知道这个问题已经被问过好几次了,我正在尝试为使用发送意图共享到 instagram 的图像添加标题

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shareIntent.putExtra(Intent.EXTRA_STREAM,uri);
shareIntent.putExtra(Intent.EXTRA_TEXT,"YOUR TEXT TO SHARE IN INSTAGRAM");
shareIntent.setPackage("com.instagram.android");
return shareIntent;

有人成功过吗?

是不支持还是撤销了支持?

【问题讨论】:

  • ACTION_SEND 协议被记录为在任何给定的Intent 上支持 either EXTRA_TEXT EXTRA_STREAM。虽然有些应用可能同时支持两者,但并不要求任何应用都支持。
  • 有人说 Instagram 确实支持额外的文本,但我无法使其正常工作,所以我特别询问 Instagram 应用

标签: java android instagram sharing


【解决方案1】:

There was an official statement from Instagram (mid-2015) 宣布 iOS 和 Android 应用不再接受预填充字幕:

从今天开始,iOS Hooks 和 Android Intent 将停止接受第三方应用传递的字幕。这是一个非破坏性的变化:使用预填充字幕的现有移动应用程序将继续能够使用此流程通过 Instagram 应用程序共享媒体,但现在 Instagram 将忽略字幕文本。要为第三方应用共享的照片或视频创建标题,用户必须手动输入标题,就像他们在使用 Instagram 原生应用共享内容时所做的一样。

查看the Instagram documentation for Android,我们确实看到没有提及在意图中额外提供传统的Intent.EXTRA_TEXT 字符串,这是其他应用程序惯用的。他们的示例仅限于提供 Uri:

// Add the URI to the Intent.
share.putExtra(Intent.EXTRA_STREAM, uri);

// Broadcast the Intent.
startActivity(Intent.createChooser(share, "Share to"));

很抱歉,这根本不可能,我们由 Facebook 自行决定。

【讨论】:

    【解决方案2】:

    直到Instagram无法解决,我将文本复制到剪贴板并指示用户粘贴

    【讨论】:

    • 这是一个不错的方法。我会考虑的。
    【解决方案3】:
     @Override
    public void onSingleImageSelected(Uri uri, String tag) {
        fileProfileImage = uri.getPath();
        compressProfileImage();
        imgShareTosocial.setVisibility(View.VISIBLE);
        Glide.with(getApplicationContext()).load(uri).into(imgShareTosocial);
    
    }
    
    @SuppressLint("CheckResult")
    private void compressProfileImage() {
        File file = new File(fileProfileImage);
        new Compressor(this)
                .compressToFileAsFlowable(file)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<File>() {
                    @Override
                    public void accept(File file) throws Exception {
    
                        compressProfileImage = file;
                        String imagePath = compressProfileImage.getAbsolutePath();
                        tvSelectMedia.setText(imagePath);
    
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        throwable.printStackTrace();
                    }
                });
    
    }
    
    private void shareToInstagram() {
        path = tvSelectMedia.getText().toString().trim();
        Intent intent = getPackageManager().getLaunchIntentForPackage("com.instagram.android");
        if (intent != null) {
            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.setPackage("com.instagram.android");
            try {
                shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), path, "Step Up", "Step Up")));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            shareIntent.setType("image/jpeg");
            startActivity(shareIntent);
        } else {
            // bring user to the market to download the app.
            // or let them choose an app?
            intent = new Intent(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("market://details?id=" + "com.instagram.android"));
            startActivity(intent);
        }
    }
    

    【讨论】:

    • 我有类似的解决方案,但它停止了工作。即使我安装了 instagram 应用程序,现在也找不到 Intent。
    【解决方案4】:

    我也有同样的问题。我认为目前是不可能的。

    https://instagram.com/developer/mobile-sharing/android-intents/ 中只讨论 Intent.EXTRA_STREAM,所以我想它是唯一可用的。

    这是我的代码:

        Intent instagramIntent = new Intent(Intent.ACTION_SEND);
        instagramIntent.setType("image/*");
        File media = new File(mediaPath);
        Uri uri = Uri.fromFile(media);
        instagramIntent.putExtra(Intent.EXTRA_STREAM, uri);
        instagramIntent.setPackage("com.instagram.android");
    
        PackageManager packManager = getPackageManager();
        List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(instagramIntent,  PackageManager.MATCH_DEFAULT_ONLY);
    
        boolean resolved = false;
        for(ResolveInfo resolveInfo: resolvedInfoList){
            if(resolveInfo.activityInfo.packageName.startsWith("com.instagram.android")){
                instagramIntent.setClassName(
                        resolveInfo.activityInfo.packageName,
                        resolveInfo.activityInfo.name );
                resolved = true;
                break;
            }
        }
        if(resolved){
            startActivity(instagramIntent);
        }else{
            Toast.makeText(PromocionarMain.this, "Instagram App is not installed", Toast.LENGTH_LONG).show();
        } 
    

    【讨论】:

    • 请勿复制粘贴旧帖
    【解决方案5】:

    Instagram 已停止接受预先填充的字幕,以提高系统中内容的质量。请参阅此帖子。

    http://developers.instagram.com/post/125972775561/removing-pre-filled-captions-from-mobile-sharing

    【讨论】:

    • 请不要对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多