Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-使用选择器对话框使用动态文本字段进行共享_Android_Twitter_Share_Android Sharing_Socialshare - Fatal编程技术网

Android-使用选择器对话框使用动态文本字段进行共享

Android-使用选择器对话框使用动态文本字段进行共享,android,twitter,share,android-sharing,socialshare,Android,Twitter,Share,Android Sharing,Socialshare,如果用户选择Twitter,我想发送一个缩写文本字段(由于字符限制)。从这篇文章中,我学到了我可以实现目标意图。然而,当我使用下面的代码时,许多应用程序显示为“Android系统”,Twitter不会显示在对话框中。我甚至删除了试图捕捉Twitter的if块,但它仍然没有出现 List<Intent> targetedShareIntents = new ArrayList<Intent>(); Intent sharingIntent = new Int

如果用户选择Twitter,我想发送一个缩写文本字段(由于字符限制)。从这篇文章中,我学到了我可以实现目标意图。然而,当我使用下面的代码时,许多应用程序显示为“Android系统”,Twitter不会显示在对话框中。我甚至删除了试图捕捉Twitter的if块,但它仍然没有出现

    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");

    PackageManager pm = rootView.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
    for(final ResolveInfo app : activityList){

        String packageName = app.activityInfo.packageName;
        Intent targetedShareIntent = new Intent(Intent.ACTION_SEND);
        targetedShareIntent.setType("text/plain");

        if(TextUtils.equals(packageName, TWITTER_PACKAGE_NAME)){
            targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
        } else {
            targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
            targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
        }

        targetedShareIntent.setPackage(packageName);
        targetedShareIntents.add(targetedShareIntent);

    }

    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size() - 1), "Share this story");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
    startActivity(chooserIntent);  

在SO post中,使用了
targetedShareContents.remove(0)
,尽管
targetedShareContents.remove(targetedShareContents.size()-1)
是一个更可重用的解决方案。非常感谢您对此提供的任何帮助或解释

我认为
TextUtils.equals(packageName,TWITTER\u PACKAGE\u NAME)
找不到确切的
com.TWITTER.android
包名,所以您需要在下面的代码中尝试匹配TWITTER包名

if(packageName.toLowerCase().startsWith("com.twitter")){
        targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
    } else {
        targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
        targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
    }

TWITTER\u PACKAGE\u NAME的值是多少?
最后一个字符串TWITTER\u PACKAGE\u NAME=“com.TWITTER.android”不幸的是,这不是问题所在。它正在查找Twitter包(我设置了一个断点),实际上我也尝试了该代码。
if(packageName.toLowerCase().startsWith("com.twitter")){
        targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data, "Twitter"));
    } else {
        targetedShareIntent.putExtra(Intent.EXTRA_SUBJECT, data.getTitle());
        targetedShareIntent.putExtra(Intent.EXTRA_TEXT, getTextToShare(data));
    }