Как я могу опубликовать в Твиттере с помощью 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"));
6 ответов
Я использую этот фрагмент в моем коде:
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 "";
}
}
Надеюсь, поможет.
Вы можете просто открыть 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 не найден.
Сначала вы должны проверить, установлено ли приложение Twitter на устройстве или нет, а затем поделиться текстом в 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();
}
Попробуйте это, я использовал это и работал отлично
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/intent/tweet?text=...."));
startActivity(browserIntent);
Для обмена текстом и изображениями в Твиттере, ниже приведена более контролируемая версия кода, вы можете добавить больше методов для обмена с 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 из File используйте следующий класс:
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
Вы можете попробовать это для обмена изображения и текста.
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:0.9.0@aar') {
transitive = true;
}
И добавьте свой метод клика это:
final String surl = "https://stackru.com/images/a35489e1c4b8fccc54bddbbe7515f8026cc162a5.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://stackru.com/images/a35489e1c4b8fccc54bddbbe7515f8026cc162a5.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);