Этот вопрос немного старше, но, поскольку я только что столкнулся с подобной проблемой, он также может по-прежнему представлять интерес для других. Во-первых, как упоминал Питер, создайте свое намерение:
Intent tweetIntent = new Intent(Intent.ACTION_SEND);
tweetIntent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore");
tweetIntent.setType("application/twitter");
"application / twitter" на самом деле является известным типом контента, см. здесь . Теперь, когда вы попытаетесь начать действие с этим намерением, оно покажет все виды приложений, которые на самом деле не являются клиентами Twitter, но хотят часть действия. Как уже упоминалось в паре "почему ты вообще хочешь это сделать?" вроде ответов, некоторые пользователи могут найти это полезным. С другой стороны, если в моем приложении есть кнопка с надписью «Чирикать об этом!», Пользователь будет очень ожидать, что это вызовет клиент Twitter.
Это означает, что вместо того, чтобы просто запускать действие, нам нужно отфильтровать те, которые подходят:
PackageManager pm = getPackageManager();
List<ResolveInfo> lract
= pm.queryIntentActivities(tweetIntent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean resolved = false;
for(ResolveInfo ri: lract)
{
if(ri.activityInfo.name.endsWith(".SendTweet"))
{
tweetIntent.setClassName(ri.activityInfo.packageName,
ri.activityInfo.name);
resolved = true;
break;
}
}
Вам нужно будет немного поэкспериментировать с разными провайдерами, но если имя оканчивается на «.SendTweet», вы в полной безопасности (это название деятельности в Twidroyd). Вы также можете проверить в отладчике имена пакетов, которые вы хотите использовать, и соответствующим образом настроить сравнение строк (т. Е. Twidroyd использует "com.twidroid. *").
В этом простом примере мы просто выбираем первое найденное совпадение. Это вызывает клиент Twitter напрямую, без необходимости делать выбор пользователю. Если нет подходящих клиентов Twitter, мы возвращаемся к стандартному средству выбора активности:
startActivity(resolved ? tweetIntent :
Intent.createChooser(tweetIntent, "Choose one"));
Вы можете расширить код и принять во внимание тот факт, что существует более одного клиента Twitter, когда вы можете захотеть создать свой собственный диалог выбора из всех найденных вами названий действий.