web-dev-qa-db-ja.com

Androidインテントを使用して、画像付きのテキストをInstagramに共有する

私はこの質問が以前に何度か尋ねられたことを知っています、私は送信インテントを使用して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;

誰かがそれを機能させることができたことがありますか?

サポートされていませんか、またはサポートが取り消されていますか?

12
ammcom

Instagram(2015年半ば)からの公式声明がありました 事前入力されたキャプションがiOSで受け入れられなくなることを発表し、Androidアプリ:

本日より、iOSフックとAndroidインテントは、サードパーティのアプリから渡されたキャプションの受け入れを停止します。これは重大な変更ではありません。事前に入力されたキャプションを利用する既存のモバイルアプリは引き続き使用できます。このフローを使用してInstagramアプリを介してメディアを共有しますが、Instagramはキャプションテキストを無視します。サードパーティのアプリが共有する写真またはビデオのキャプションを作成するには、ユーザーは同じ方法で手動でキャプションを入力する必要があります。 Instagramのネイティブアプリを使用してコンテンツを共有する場合は、すでに行っています。

Android用のInstagramドキュメント を見ると、他のアプリで一般的であるように、意図的に従来の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の裁量に委ねられています。

12
Paul Lammertsma

Instagramで解決されなくなるまで、テキストをクリップボードにコピーして、ユーザーに貼り付けるように指示します。

7
 @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);
    }
}
2
patel jigar

Instagramは、システム内のコンテンツの品質を向上させるために、事前入力されたキャプションの受け入れを停止しました。この投稿を参照してください。

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

0
siliconeagle

私も同じ問題を抱えています。現時点では不可能だと思います。

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();
    } 
0
Martín Huergo