Как я могу опубликовать в Twitter с помощью Intent Action_send?

Я пытаюсь отправить текст из своего приложения в Twitter.

В приведенном ниже коде приводится список таких приложений, как Bluetooth, Gmail, Facebook и Twitter, но когда я выбираю Twitter, он не заполняет текст так, как я ожидал.

Я знаю, что есть проблемы вокруг этого с Facebook, но я должен делать что-то неправильно, чтобы он не работал с Twitter.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Example Text");
startActivity(Intent.createChooser(intent, "Share Text"));

Ответ 1

Я использую этот фрагмент кода:

private void shareTwitter(String message) {
    Intent tweetIntent = new Intent(Intent.ACTION_SEND);
    tweetIntent.putExtra(Intent.EXTRA_TEXT, "This is a Test.");
    tweetIntent.setType("text/plain");

    PackageManager packManager = getPackageManager();
    List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);

    boolean resolved = false;
    for (ResolveInfo resolveInfo : resolvedInfoList) {
        if (resolveInfo.activityInfo.packageName.startsWith("com.twitter.android")) {
            tweetIntent.setClassName(
                    resolveInfo.activityInfo.packageName,
                    resolveInfo.activityInfo.name);
            resolved = true;
            break;
        }
    }
    if (resolved) {
        startActivity(tweetIntent);
    } else {
        Intent i = new Intent();
        i.putExtra(Intent.EXTRA_TEXT, message);
        i.setAction(Intent.ACTION_VIEW);
        i.setData(Uri.parse("https://twitter.com/intent/tweet?text=" + urlEncode(message)));
        startActivity(i);
        Toast.makeText(this, "Twitter app isn't found", Toast.LENGTH_LONG).show();
    }
}

private String urlEncode(String s) {
    try {
        return URLEncoder.encode(s, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        Log.wtf(TAG, "UTF-8 should always be supported", e);
        return "";
    }
}

Надеюсь, что это поможет.

Ответ 2

вы можете просто открыть URL с текстом, и приложение Twitter сделает это.;)

String url = "http://www.twitter.com/intent/tweet?url=YOURURL&text=YOURTEXT";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

и он также откроет браузер для входа в твит, если приложение Twitter не найдено.

Ответ 3

Попробуй, я использовал его и отлично работал

  Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/intent/tweet?text=...."));
  startActivity(browserIntent);         

Ответ 4

Сначала вам нужно проверить, установлено ли приложение Twitter на устройстве или нет, а затем поделиться текстом в твиттере:

try
    {
        // Check if the Twitter app is installed on the phone.
        getActivity().getPackageManager().getPackageInfo("com.twitter.android", 0);
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setClassName("com.twitter.android", "com.twitter.android.composer.ComposerActivity");
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, "Your text");
        startActivity(intent);

    }
    catch (Exception e)
    {
        Toast.makeText(getActivity(),"Twitter is not installed on this device",Toast.LENGTH_LONG).show();

    }

Ответ 5

Для обмена текстом и изображением на Twitter приведена более контролируемая версия кода, вы можете добавить больше методов для обмена с WhatsApp, Facebook... Это для официального приложения и не открывает браузер, если приложение не существует.

public class IntentShareHelper {

    public static void shareOnTwitter(AppCompatActivity appCompatActivity, String textBody, Uri fileUri) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.setPackage("com.twitter.android");
        intent.putExtra(Intent.EXTRA_TEXT,!TextUtils.isEmpty(textBody) ? textBody : "");

        if (fileUri != null) {
            intent.putExtra(Intent.EXTRA_STREAM, fileUri);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setType("image/*");
        }

        try {
            appCompatActivity.startActivity(intent);
        } catch (android.content.ActivityNotFoundException ex) {
            ex.printStackTrace();
            showWarningDialog(appCompatActivity, appCompatActivity.getString(R.string.error_activity_not_found));
        }
    }

    public static void shareOnWhatsapp(AppCompatActivity appCompatActivity, String textBody, Uri fileUri){...}

    private static void showWarningDialog(Context context, String message) {
        new AlertDialog.Builder(context)
                .setMessage(message)
                .setNegativeButton(context.getString(R.string.close), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setCancelable(true)
                .create().show();
    }
}

Для получения Uri из файла используйте класс ниже:

public class UtilityFile {
    public static @Nullable Uri getUriFromFile(Context context, @Nullable File file) {
        if (file == null)
            return null;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            try {
                return FileProvider.getUriForFile(context, "com.my.package.fileprovider", file);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        } else {
            return Uri.fromFile(file);
        }
    }

    // Returns the URI path to the Bitmap displayed in specified ImageView       
    public static Uri getLocalBitmapUri(Context context, ImageView imageView) {
        Drawable drawable = imageView.getDrawable();
        Bitmap bmp = null;
        if (drawable instanceof BitmapDrawable) {
            bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        } else {
            return null;
        }
        // Store image to default external storage directory
        Uri bmpUri = null;
        try {
            // Use methods on Context to access package-specific directories on external storage.
            // This way, you don't need to request external read/write permission.
            File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png");
            FileOutputStream out = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.close();

            bmpUri = getUriFromFile(context, file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bmpUri;
    }    
}

Для записи FileProvider используйте эту ссылку: https://github.com/codepath/android_guides/wiki/Sharing-Content-with-Intents

Ответ 6

Вы можете попробовать это для общего изображения и текста.

build.gradle (Проекты)

allprojects {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }
}

build.gradle (приложение)

 dependencies {

    implementation 'com.squareup.picasso:picasso:2.5.2'

    implementation('com.twitter.sdk.android:tweet-composer:[email protected]') {
        transitive = true;
    }

И добавьте свой метод click:

  final String surl = "https://i.stack.imgur.com/zlR4C.jpg";

  Target target = new Target() {
                    @Override
                    public void onBitmapLoaded(Bitmap _bitmap, Picasso.LoadedFrom from) {
                      Bitmap  bmp = _bitmap;
                        String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bmp, "SomeText", null);
                        Log.d("Path", path);
                        Uri screenshotUri = Uri.parse(path);

                        TweetComposer.Builder builder = null;
                        try {
                            builder = new TweetComposer.Builder(context)
                                    .text("Hello Twitter")
                                    .image(screenshotUri);
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }
                        builder.show();
                    }

                    @Override
                    public void onBitmapFailed(Drawable errorDrawable) {

                    }

                    @Override
                    public void onPrepareLoad(Drawable placeHolderDrawable) {

                    }
                };
                Picasso.with(context).load(surl).into(target);

или поделиться намерениями:

     final String surl = "https://i.stack.imgur.com/zlR4C.jpg";

          Target target = new Target() {
                            @Override
                            public void onBitmapLoaded(Bitmap _bitmap, Picasso.LoadedFrom from) {
                              Bitmap  bmp = _bitmap;
                                String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bmp, "SomeText", null);
                                Log.d("Path", path);
                                Uri screenshotUri = Uri.parse(path);
                                   Intent intent = new Intent(Intent.ACTION_SEND);
                            intent.putExtra(Intent.EXTRA_TEXT, "Hello Twitter");

                            intent.putExtra(Intent.EXTRA_STREAM, uri);
                            intent.setType("image/*");
                            intent.setPackage("com.twitter.android");
                            startActivity(Intent.createChooser(intent, "Add Tweet..."));
                            }

                            @Override
                            public void onBitmapFailed(Drawable errorDrawable) {

                            }

                            @Override
                            public void onPrepareLoad(Drawable placeHolderDrawable) {

                            }
                        };
                        Picasso.with(context).load(surl).into(target);