使用android意图将带有图像的文本共享到instagram

Posted

技术标签:

【中文标题】使用android意图将带有图像的文本共享到instagram【英文标题】:Sharing text with image to instagram using android intent 【发布时间】: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 应用 【参考方案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

【讨论】:

请不要对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答

以上是关于使用android意图将带有图像的文本共享到instagram的主要内容,如果未能解决你的问题,请参考以下文章

从内容 URI 中获取搜索图像的绝对文件路径

facebook的Android共享意图-共享文本和链接

使用意图的 Android 6.0 instagram 图像共享不起作用

使用 facebook SDK 仅共享文本

仅带有图像选项的相机意图

Android 图像共享意图 - 不支持文件格式