【问题标题】:Android share intent Twitter: How to share only by Tweet or Direct Message?Android 分享意图 Twitter:如何仅通过推文或私信进行分享?
【发布时间】:2015-10-20 10:16:50
【问题描述】:

我只需要通过推文分享图片。

这是我的代码

Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("image/*");
        if (mInsertableToGallery) {
            mInsertableToGallery = false;
            mInsertedImagePath = MediaStore.Images.Media.insertImage(getContentResolver(), mShareImage,
                    getResources().getString(R.string.app_name) + System.currentTimeMillis(), getResources().getString(R.string.app_name));
        }
        // share only 5 specific apps:
        List<Intent> targetedShareIntents = new ArrayList<>();
        List<ResolveInfo> resInfos = getPackageManager().queryIntentActivities(shareIntent, 0);
        if (!resInfos.isEmpty()) {
            for (ResolveInfo resolveInfo : resInfos) {
                String packageName = resolveInfo.activityInfo.packageName;
                Intent targetedShareIntent = new Intent(Intent.ACTION_SEND);
                targetedShareIntent.setType("image/*");
                targetedShareIntent.setPackage(packageName);
                targetedShareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(mInsertedImagePath));
                if (TextUtils.equals(packageName, "com.facebook.katana") //fb
                ||TextUtils.equals(packageName, "com.instagram.android") //instagram
                ||TextUtils.equals(packageName, "jp.naver.line.android") //line
                ||TextUtils.equals(packageName, "com.google.android.apps.plus") // plus
                ||TextUtils.equals(packageName, "com.twitter.android")) // twitter
            {
                targetedShareIntents.add(targetedShareIntent);
            }

            }
        }
        Intent chooser = Intent.createChooser(targetedShareIntents.remove(0), "");
        chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
        startActivity(chooser);

我得到了结果:

点击“Android系统”时,推特分享弹窗:

我想要什么:

  1. 如何仅通过推特或直接消息通过 Twitter 分享?

  2. 如何更改共享项目的标题和图标。前 Twitter 将项目从“Android 系统”分享到“Tweet”?

【问题讨论】:

  • 这里有同样的问题。很惊讶没有更多的赞成票。你能解决这个问题吗?
  • 对不起,我没能完成 :(

标签: android android-intent twitter share


【解决方案1】:

我无法将 Tweet 和 Direct Message 都放在前面,但下面的代码可以让你到达前面。实际上,您可以将两者都放在前面,但两者都以相同的名称“Tweet”出现,因此有点无法使用。 我还包括了 facebook、insta 和 tumblr。 要使用直接消息代替推文,请将 com.twitter.android.composer.ComposerActivity 替换为 com.twitter.android.DMActivity。要让两者都为 DMActivity 添加另一个 'if'。

不能肯定,但我认为你不能为你的应用更改包的图标。

List<Intent> targetedShareIntents = new ArrayList<Intent>();
        Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
        shareIntent.setType("image/jpeg");//("text/plain");
        Uri uri = Uri.fromFile(outFile);
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
        List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);
        for (ResolveInfo resolveInfo : resInfo) {
            String packageName = resolveInfo.activityInfo.packageName;
            Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
            targetedShareIntent.setType("image/jpeg");
            targetedShareIntent.putExtra(Intent.EXTRA_STREAM, uri);
            if(TextUtils.equals(packageName,"com.facebook.katana")|TextUtils.equals(packageName,"com.instagram.android")
                    |TextUtils.equals(packageName,"com.tumblr")) {
                targetedShareIntent.setPackage(packageName);
                targetedShareIntents.add(targetedShareIntent);
            }
            if(TextUtils.equals(resolveInfo.activityInfo.name,"com.twitter.android.composer.ComposerActivity")) {
                targetedShareIntent.setPackage(packageName);
                targetedShareIntent.setClassName(
                        resolveInfo.activityInfo.packageName,
                        resolveInfo.activityInfo.name);
                targetedShareIntents.add(targetedShareIntent);
            }
        }
        Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
        startActivity(chooserIntent);

【讨论】:

    【解决方案2】:

    撰写新推文:

    public static Intent getTwitterShareIntent(Context context) {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shareIntent.setClassName("com.twitter.android",
                "com.twitter.composer.ComposerShareActivity");
        return shareIntent;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多