如何创建一个可以与所有客户端一起使用的android共享意图?

时间:2013-04-03 17:13:42

标签: android android-intent twitter share

您好我正在开发应用,我希望使用分享意图发布带有照片的推文。 首先我搜索并发现了一个与官方客户合作的意图,我想要的是我的应用程序可以与所有客户合作。

这是我的代码:

    String message = "Here goes my message";
    Uri screenshotUri = Uri.parse("file:///sdcard/screenshot.jpeg");
    try {
        Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.setClassName(getApplicationContext(),findTwitterClient().getPackage());
        sharingIntent.putExtra(Intent.EXTRA_TEXT, message);
        sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
        startActivity(sharingIntent);
    } catch (Exception e) {
        Log.e("In Exception", "Comes here");

        //This also opens a dialog that

    }

此外,我还有以下功能来了解设备上安装的客户端。

public Intent findTwitterClient() {
    final String[] twitterApps = {
            // package // name - nb installs (thousands)
            "com.twitter.android", // official - 10 000
            "com.twidroid", // twidroyd - 5 000
            "com.handmark.tweetcaster", // Tweecaster - 5 000
            "com.thedeck.android" /* TweetDeck - 5 000*/ };
    Intent tweetIntent = new Intent();
    tweetIntent.setType("text/plain");
    final PackageManager packageManager = getPackageManager();
    List<ResolveInfo> list = packageManager.queryIntentActivities(
            tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);

    for (int i = 0; i < twitterApps.length; i++) {
        for (ResolveInfo resolveInfo : list) {
            String p = resolveInfo.activityInfo.packageName;
            if (p != null && p.startsWith(twitterApps[i])) {
                tweetIntent.setPackage(p);
                return tweetIntent;
            }
        }
    }
    return null;
}

2 个答案:

答案 0 :(得分:1)

如果您的网址以“http://twitter.com”开头,Android会询问用户应该打开推文的应用。几乎所有注册该URL方案的应用都可以使用。

答案 1 :(得分:1)

您不能保证可以与所有Twitter客户共享。意图是应用程序之间的一种接口。每个客户端自己决定它支持哪些意图处理。您可以轻松想象一个自定义的Twitter客户端,它不会处理除主要启动之外的任何意图。