是否有可能显示的应用程序(使用列表intent.createChooser
)只显示我的手机(HTC这样窥视(HTC Hero的)或twitdroid)在我的Twitter应用程序。 我有尝试过intent.settype("application/twitter")
但它不找到任何Twitter的应用程序,只显示我的电子邮件应用程序。
谢谢,
沃特
是否有可能显示的应用程序(使用列表intent.createChooser
)只显示我的手机(HTC这样窥视(HTC Hero的)或twitdroid)在我的Twitter应用程序。 我有尝试过intent.settype("application/twitter")
但它不找到任何Twitter的应用程序,只显示我的电子邮件应用程序。
谢谢,
沃特
这是完全有可能你的用户将只,现在和永远,只希望发布到Twitter。
我会认为它更可能是你的用户要发送信息的人,而Twitter是一种可能性。 但是,他们可能还需要发送短信或电子邮件等。
在这种情况下,使用ACTION_SEND
,描述在这里 。 Twidroid,值得注意的是,支持ACTION_SEND
,所以它会出现在可用交付机制的列表。
我张贴这一点,因为我还没有看到一个解决方案然而这不正是我想要的东西。
这主要推出官方Twitter的应用程序 ,或者如果没有安装,要么“用...完整行动”对话框(会出现一个像这样的 ),或者直接打开网页浏览器。
对于在twitter.com URL不同的参数列表,请参阅资料Tweet按钮文档 。 请记住, URL编码的参数值。 (此代码是专为啁啾一个URL;如果你不希望出现这种情况,就离开了url
PARAM。)
// Create intent using ACTION_VIEW and a normal Twitter url:
String tweetUrl = String.format("https://twitter.com/intent/tweet?text=%s&url=%s",
urlEncode("Tweet text"),
urlEncode("https://www.google.fi/"));
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tweetUrl));
// Narrow down to official Twitter app, if available:
List<ResolveInfo> matches = getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo info : matches) {
if (info.activityInfo.packageName.toLowerCase().startsWith("com.twitter")) {
intent.setPackage(info.activityInfo.packageName);
}
}
startActivity(intent);
(URL编码是清洁的,如果你有一个小工具,像这样的地方,如“StringUtils的”。)
public static String urlEncode(String s) {
try {
return URLEncoder.encode(s, "UTF-8");
}
catch (UnsupportedEncodingException e) {
Log.wtf(TAG, "UTF-8 should always be supported", e);
throw new RuntimeException("URLEncoder.encode() failed for " + s);
}
}
例如,我的Nexus 7设备上,这直接打开官方Twitter的应用程序 :
如果官方Twitter的应用程序未安装和用户要么选择Chrome或自动打开(如它可以处理这个意图的唯一的应用程序):
该解决方案之前发布的,允许你直接在你的第一个Twitter的应用程序发布。 要显示Twitter的应用程序的列表(如果有一个以上的),你可以定制你的Intent.createChooser,只显示你想要的Itents。
诀窍是在列表中添加EXTRA_INITIAL_INTENTS到默认列表,从createChoose产生,并删除其他的意图。
看看这个样,我创建一个选择器只显示我的电子邮件应用程序。 在我的情况出现3个邮件:Gmail中,YahooMail和默认的邮件。
private void share(String nameApp, String imagePath) {
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/jpeg");
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(share, 0);
if (!resInfo.isEmpty()){
for (ResolveInfo info : resInfo) {
Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);
targetedShare.setType("image/jpeg"); // put here your mime type
if (info.activityInfo.packageName.toLowerCase().contains(nameApp) ||
info.activityInfo.name.toLowerCase().contains(nameApp)) {
targetedShare.putExtra(Intent.EXTRA_TEXT, "My body of post/email");
targetedShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(imagePath)) );
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareIntents.add(targetedShare);
}
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
}
}
您可以运行这样的:份额( “TWI”, “/sdcard/dcim/Camera/photo.jpg”);
:这是基于岗位基础上安装Android包名意向选择器的自定义过滤
这个问题是有点老,但因为我刚刚碰到过类似的问题,它也可能仍然有兴趣的人。 首先,正如彼得所说,创建你的意图:
Intent tweetIntent = new Intent(Intent.ACTION_SEND);
tweetIntent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore");
tweetIntent.setType("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客户端,当你可能希望从你找到活动的名称创建您自己的选择对话框。
这些答案都过于复杂。
如果你只是做一个正常的URL意向,做到Twitter.com,你会得到这个画面:
它给你要访问的网站的选择,如果你有安装任何Twitter的应用程序。
String url = "https://twitter.com/intent/tweet?source=webclient&text=TWEET+THIS!";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
或
Intent.ACTION_SEND
和text/plain
MIME类型。 你必须支持发送文本的所有应用程序。 这应该是所有的Twitter客户端,以及包括Gmail,Dropbox的,等等。 不。 这样做的目的类型是像image/png
或application/pdf
,即文件类型,并与createChooser你基本上是问哪些程序可以打开此文件类型。
现在,有作为没有这样的东西application/twitter
可以打开的文件,这样就不会工作。 我不知道,你可以实现你想要什么或者任何其他方式。
从http://twidroid.com/plugins/
Twidroid的ACTION_SEND意图
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is a sample message via Public Intent");
sendIntent.setType("application/twitter");
startActivity(Intent.createChooser(sendIntent, null));
我用“billynomates”的答案,并能使用“URLEncoder.encode(‘UTF-8’)”函数的使用#标签。 哈希标签出现了就好了。
String originalMessage = "some message #MESSAGE";
String originalMessageEscaped = null;
try {
originalMessageEscaped = String.format(
"https://twitter.com/intent/tweet?source=webclient&text=%s",
URLEncoder.encode(originalMessage, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if(originalMessageEscaped != null) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(originalMessageEscaped));
startActivity(i);
}
else {
// Some Error
}