Как заставить Share Intent открыть конкретное приложение?
Мне нравится совместное использование, это прекрасно, чтобы открывать приложения для обмена с изображениями и текстовыми параметрами.
Но теперь я исследую способ принудительного совместного использования, чтобы открыть определенное приложение из списка, с параметрами, указанными в намерении поделиться.
Это мой фактический код, он показывает список общих приложений, установленных на телефоне. Пожалуйста, может кто-нибудь сказать мне, что я должен добавить к коду, чтобы заставить, например, официальное приложение Twitter? и официальное приложение faccebok?
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse("file:///sdcard/test.jpg");
sharingIntent.setType("image/*");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "body text");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share image using"));
Спасибо
Ответы
Ответ 1
Для Facebook
public void shareFacebook() {
String fullUrl = "https://m.facebook.com/sharer.php?u=..";
try {
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setClassName("com.facebook.katana",
"com.facebook.katana.ShareLinkActivity");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "your title text");
startActivity(sharingIntent);
} catch (Exception e) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(fullUrl));
startActivity(i);
}
}
Для Twitter.
public void shareTwitter() {
String message = "Your message to post";
try {
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setClassName("com.twitter.android","com.twitter.android.PostActivity");
sharingIntent.putExtra(Intent.EXTRA_TEXT, message);
startActivity(sharingIntent);
} catch (Exception e) {
Log.e("In Exception", "Comes here");
Intent i = new Intent();
i.putExtra(Intent.EXTRA_TEXT, message);
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("https://mobile.twitter.com/compose/tweet"));
startActivity(i);
}
}
Ответ 2
Существует более общий способ сделать это, и нет необходимости знать полное имя пакета намерения приложения.
Смотрите это сообщение:
Как настроить намерение совместного использования в Android?
Ответ 3
100% Рабочее решение
если вы хотите поделиться чем-то в любом приложении, которое хотите, или открыть URL-адрес через каждое действие, просто используйте этот метод:
private void shareOrViewUrlViaThisApp(String appPackageName, String url) {
boolean found = false;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
if (!resInfo.isEmpty()){
for (ResolveInfo info : resInfo) {
if (info.activityInfo.packageName.toLowerCase().contains(appPackageName) ||
info.activityInfo.name.toLowerCase().contains(appPackageName) ) {
intent.setPackage(info.activityInfo.packageName);
found = true;
break;
}
}
if (!found)
return;
startActivity(Intent.createChooser(intent, "Select"));
}
}
и просто вызовите:
shareOrViewUrlViaThisApp(<your package name>,<your url>);
Этот ответ был вдохновлен этим.