Android IntentChooser-不同应用的不同意图

Android IntentChooser-不同应用的不同意图,android,android-intent,Android,Android Intent,我找到了答案,它解释了如何为每个应用程序创建不同的意图,但也解释了为什么它不起作用: 这是重现问题的代码,您甚至可以在if中对进行注释,您将获得文本而不是twitter public Intent getShareChooserIntent(Context context) { Intent basicIntent = new Intent(); basicIntent.setAction(Intent.ACTION_SEND); basicIntent.setType(

我找到了答案,它解释了如何为每个应用程序创建不同的意图,但也解释了为什么它不起作用:

这是重现问题的代码,您甚至可以在
if
中对
进行注释,您将获得
文本而不是
twitter

public Intent getShareChooserIntent(Context context) {
    Intent basicIntent = new Intent();
    basicIntent.setAction(Intent.ACTION_SEND);
    basicIntent.setType("text/plain");
    basicIntent.putExtra(Intent.EXTRA_TEXT, "text");
    basicIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");
    PackageManager pm = context.getPackageManager();

    Intent openInChooser = Intent.createChooser(basicIntent, "share");
    List<ResolveInfo> resInfo = pm.queryIntentActivities(basicIntent, 0);
    List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();        
    for (int i = 0; i < resInfo.size(); i++) {
       ResolveInfo ri = resInfo.get(i);
       String packageName = ri.activityInfo.packageName;
       Intent realIntent = new Intent();
       realIntent.setAction(Intent.ACTION_SEND);
       realIntent.setType("text/plain");
       realIntent.putExtra(Intent.EXTRA_TEXT, "text");
       realIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");

       if (packageName.contains("twitter")) // !!!!THIS LINE!!!!
           realIntent.putExtra(Intent.EXTRA_TEXT, "twitter");

       intentList.add(new LabeledIntent(realIntent, packageName, ri.loadLabel(pm), ri.icon));
    }

    openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray( new LabeledIntent[ intentList.size()]));
    return openInChooser;
}
public Intent获取共享选择内容(上下文){
意向基本内容=新意向();
基本内容设置动作(意图动作发送);
基本内容设置类型(“文本/普通”);
基本内容putExtra(Intent.EXTRA_TEXT,“TEXT”);
基本内容putExtra(Intent.EXTRA_SUBJECT,“SUBJECT”);
PackageManager pm=context.getPackageManager();
Intent openInChooser=Intent.createChooser(基本内容,“共享”);
List resInfo=pm.querytentActivities(基本内容,0);
List intentList=new ArrayList();
对于(int i=0;i

我做错了什么

不确定getShareBasicIntent做什么,但这段代码对我来说很好(在使用和不使用twitter的情况下都进行了检查)

静态公共意图GetShareChooseContent(上下文){
PackageManager pm=context.getPackageManager();
//请注意,此目的仅适用于电子邮件
//避免列表中出现重复项
意向emailIntent=新意向(Intent.ACTION\u SEND);
emailIntent.setType(“文本/普通”);
emailIntent.putExtra(Intent.EXTRA_文本,“非twitter”);
emailIntent.putExtra(Intent.EXTRA_SUBJECT,“SUBJECT”);
emailIntent.setType(“message/rfc822”);
Intent openInChooser=Intent.createChooser(emailIntent,“共享”);
//用于查询可支持的所有活动的基本意图
//文本共享
意向基本内容=新意向();
基本内容设置动作(意图动作发送);
基本内容设置类型(“文本/普通”);
List resInfo=pm.querytentActivities(基本内容,0);
List intentList=new ArrayList();
对于(int i=0;i
您能否发布
getShareBasicIntent()的实现?
完成。。刚刚复制了源代码哦,我现在看到了我的问题,我忘记了
setComponent
setPackage
,它们在这里很重要。请注意,您的答案会创建一个重复的列表,其中一个是与基本意图匹配的所有应用程序,第二个是您在列表中创建的意图。为了避免此类行为,您可以将创建第一个列表的意图传递到
intent.createChooser
和Email only intent,然后添加自定义意图。将在修复后获得批准
static public Intent getShareChooserIntent(Context context) {

    PackageManager pm = context.getPackageManager();

    // Note that this intent should only be for email
    // to avoid duplicates in the list
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "not twitter"); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    emailIntent.setType("message/rfc822");
    Intent openInChooser = Intent.createChooser(emailIntent, "share");

    // the basic intent used to query all the activities that can support
    // text sharing
    Intent basicIntent = new Intent();
    basicIntent.setAction(Intent.ACTION_SEND);
    basicIntent.setType("text/plain"); 
    List<ResolveInfo> resInfo = pm.queryIntentActivities(basicIntent, 0);

    List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();        
    for (int i = 0; i < resInfo.size(); i++) {
        ResolveInfo ri = resInfo.get(i);
        String packageName = ri.activityInfo.packageName;
        Intent intent=new Intent();
        intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
        intent.setAction(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, "not twitter"); 
        intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
        intent.setPackage(packageName);

        if (packageName.contains("twitter")) { 
            intent.putExtra(Intent.EXTRA_TEXT, "twitter");
        }

        intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
    }

    openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray( new LabeledIntent[ intentList.size()]));
    return openInChooser;
}