wou*_*r88 61 twitter android android-intent
是否有可能显示一个应用程序列表(intent.createChooser仅),只显示我的手机上的我的推特应用程序(所以htc peep(htc hero)或twitdroid).我试过它,intent.settype("application/twitter")但它没有找到任何Twitter的应用程序,只显示我的邮件应用程序.
谢谢,
沃特
Jon*_*nik 82
我发布这个是因为我还没有看到一个完全符合我想要的解决方案.
这主要是推出官方Twitter应用程序,或者如果没有安装,则会显示"使用...完成操作"对话框(如下所示)或直接启动Web浏览器.
有关twitter.com URL中不同参数的列表,请参阅Tweet按钮文档.请记住对参数值进行URL编码.(此代码专门用于发送URL;如果您不想这样做,请忽略该url参数.)
// 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);
Run Code Online (Sandbox Code Playgroud)
(如果你有一个像这样的小实用程序,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);
}
}
Run Code Online (Sandbox Code Playgroud)
例如,在我的Nexus 7设备上,这将直接打开官方Twitter应用程序:
如果未安装官方Twitter应用程序,用户可选择Chrome或自动打开(作为唯一可以处理意图的应用程序):

Der*_*rzu 39
之前发布的解决方案允许您直接在第一个Twitter应用上发布.要显示twitters应用程序列表(如果有多个),您可以自定义Intent.createChooser以仅显示您想要的Itents.
诀窍是将EXTRA_INITIAL_INTENTS添加到从createChoose生成的默认列表中,并从列表中删除其他Intent.
请看这个示例,我在其中创建一个仅显示我的电子邮件应用程序的选择器.在我的情况下出现三个邮件: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);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样运行:share("twi","/ sdcard/dcim/Camera/photo.jpg");
这是基于post:基于已安装的Android软件包名称自定义过滤意图选择器
Ale*_*erg 34
这个问题有点老了,但是因为我刚遇到类似的问题,所以其他人也可能感兴趣.首先,正如Peter所说,创造你的意图:
Intent tweetIntent = new Intent(Intent.ACTION_SEND);
tweetIntent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore");
tweetIntent.setType("application/twitter");
Run Code Online (Sandbox Code Playgroud)
"application/twitter"实际上是一种已知的内容类型,请参见此处.现在,当您尝试使用此意图启动活动时,它将显示各种不是Twitter客户端的应用程序,但需要一部分操作.正如前面提到的那样,"为什么你甚至想这样做?" 一些答案,一些用户可能会觉得有用.另一方面,如果我的应用程序中有一个按钮"Tweet this!",那么用户非常期望这会打开一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要对不同的提供程序进行一些实验,但如果名称以".SendTweet"结尾,则您非常安全(这是Twidroyd中的活动名称).您还可以检查调试器是否要使用包名称,并相应地调整字符串比较(即Twidroyd使用"com.twidroid.*").
在这个简单的例子中,我们只选择我们找到的第一个匹配活动.这直接打开了Twitter客户端,用户无需做出任何选择.如果没有合适的Twitter客户端,我们将恢复为标准活动选择器:
startActivity(resolved ? tweetIntent :
Intent.createChooser(tweetIntent, "Choose one"));
Run Code Online (Sandbox Code Playgroud)
您可以扩展代码并考虑有多个Twitter客户端的情况,当您可能想要从找到的所有活动名称创建自己的选择器对话框时.
Com*_*are 23
您的用户完全有可能现在和永远只想发布到Twitter.
我认为您的用户更有可能想要向人们发送信息,而Twitter是一种可能性.但是,他们可能还想发送短信或电子邮件等.
在这种情况下,使用ACTION_SEND,描述在这里.特别是Twidroid支持ACTION_SEND,因此它将出现在可用的传递机制列表中.
Spe*_*eed 17
这些答案都过于复杂.
如果你只是对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);
Run Code Online (Sandbox Code Playgroud)
或
Intent.ACTION_SEND和text/plainMIME类型启动活动.您将拥有支持发送文本的所有应用程序.这应该是任何Twitter客户端,以及Gmail,Dropbox等.| 归档时间: |
|
| 查看次数: |
77535 次 |
| 最近记录: |