与自定义意图列表共享数据显示 Android 系统

Sharing data with custom list of intent display an Android System

我尝试仅通过 facebook、twitter 和 g+ 共享一些数据,因此我创建了一个自定义的意图列表,我可以发送一些文本,一切正常。 但是我在推特上遇到了显示问题,见下文

你可以看到这个系统 Android 如果我点击它,我会得到这个:

查看代码:

在第一个函数中,我只是放入了我想使用的包

private List<String> getShareApplication(){
    List<String> mList=new ArrayList<>();
    mList.add("com.facebook.katana");
    mList.add("com.google.android.apps.plus");
    mList.add("com.twitter.android");
    return mList;
}

在这一个中,我使用上面的列表,我在循环中查看包是否存在于我的 phone 上,我创建一个带有 ACTION_SEND 的 Intent 调用 targetedShare 并放置里面有一些文字,最后将它添加到 targetedShareIntents 列表

 private void Share(List<String> PackageName) {
            List<Intent> targetedShareIntents = new ArrayList<>();
            Intent share = new Intent(android.content.Intent.ACTION_SEND);
            share.setType("text/plain");
            List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(share, 0);
            if (!resInfo.isEmpty()){
                for (ResolveInfo info : resInfo) {
                    Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);
                    if (PackageName.contains(info.activityInfo.packageName.toLowerCase())) {
                        targetedShare.setType("text/plain");
                        targetedShare.putExtra(Intent.EXTRA_TEXT, String.valueOf(urlJson));
                        targetedShare.setPackage(info.activityInfo.packageName.toLowerCase());
                        targetedShareIntents.add(targetedShare);
                    }
                }
                Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
                startActivity(chooserIntent);
            }
        }
    }

我尝试使用在 Whosebug 上找到的一些其他代码,我尝试使用其他设备,我尝试使用其他一些 Twitter 包名称,例如:

com.twitter.android.composer.ComposerActivity

com.twitter.android.DMActivity

com.twitter.android.PostActivity

等...

但我仍然遇到这个问题

如果有人遇到这个问题,我找到了解决方案,您需要使用此功能在 Intent 列表中单独添加 twitter :

public Intent findTwitterClient() {
    final String[] twitterApps = {
            "com.twitter.android",
            "com.twidroid",
            "com.handmark.tweetcaster",
            "com.thedeck.android" };
    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;
}

你可以这样使用它: targetedShareIntents.add(findTwitterClient());