Android的意图的Twitter应用程序Android的意图的Twitter应用程序(Andro

2019-05-08 22:35发布

是否有可能显示的应用程序(使用列表intent.createChooser )只显示我的手机(HTC这样窥视(HTC Hero的)或twitdroid)在我的Twitter应用程序。 我有尝试过intent.settype("application/twitter")但它不找到任何Twitter的应用程序,只显示我的电子邮件应用程序。

谢谢,

沃特

Answer 1:

这是完全有可能你的用户将只,现在和永远,只希望发布到Twitter。

我会认为它更可能是你的用户要发送信息的人,而Twitter是一种可能性。 但是,他们可能还需要发送短信或电子邮件等。

在这种情况下,使用ACTION_SEND ,描述在这里 。 Twidroid,值得注意的是,支持ACTION_SEND ,所以它会出现在可用交付机制的列表。



Answer 2:

我张贴这一点,因为我还没有看到一个解决方案然而这不正是我想要的东西。

这主要推出官方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或自动打开(如它可以处理这个意图的唯一的应用程序):



Answer 3:

该解决方案之前发布的,允许你直接在你的第一个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包名意向选择器的自定义过滤



Answer 4:

这个问题是有点老,但因为我刚刚碰到过类似的问题,它也可能仍然有兴趣的人。 首先,正如彼得所说,创建你的意图:

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客户端,当你可能希望从你找到活动的名称创建您自己的选择对话框。



Answer 5:

这些答案都过于复杂。

如果你只是做一个正常的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);


Answer 6:

  • 你用行动的意图开始活动Intent.ACTION_SENDtext/plain MIME类型。 你必须支持发送文本的所有应用程序。 这应该是所有的Twitter客户端,以及包括Gmail,Dropbox的,等等。
  • 或者,您尝试查找的特定动作每一个客户你是知道的,像“com.twitter.android.PostActivity”的官方客户端 。 这将指向此客户端,这是不太可能的完整列表。
  • 或者,你与第二点开始,回落第一...


Answer 7:

不。 这样做的目的类型是像image/pngapplication/pdf ,即文件类型,并与createChooser你基本上是问哪些程序可以打开此文件类型。

现在,有作为没有这样的东西application/twitter可以打开的文件,这样就不会工作。 我不知道,你可以实现你想要什么或者任何其他方式。



Answer 8:

从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)); 


Answer 9:

我用“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
}


文章来源: Android Intent for Twitter application