android - IntentChooser - 不同应用程序的不同 Intent

标签 android android-intent

我找到了this答案,它解释了如何为每个应用程序创建不同的 Intent ,以及它不起作用的一些原因:

这里是重现问题的代码,您甚至可以注释 if 并且您将坚持获取 text 而不是 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;
}

我做错了什么?

最佳答案

不确定 getShareBasicIntent 做什么,但这段代码对我来说效果很好(使用和不使用 Twitter 进行了检查)

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;
}   

关于android - IntentChooser - 不同应用程序的不同 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831845/

相关文章:

android - 如何使用Gradle库在Android中使用自定义字体?

java - 多次循环一个方法会导致错误

android - 上下文/覆盖主题颜色

android - 在onResume中调用intent会导致无限递归

java - 需要有关 android 中的 listitem click 的帮助

Android:调用 Activity 时应用程序关闭。 Intent 、上下文、字符串

java - 在 PDF 中搜索单词并在 android 中使用 iText 提取它

android - Android TextView 中的 CSS

android - 调试 android.intent.action.BOOT_COMPLETED

Android 日历时区不随 CalendarContract 改变