【问题标题】:Show only specific options when doing Implicit Intent执行隐式意图时仅显示特定选项
【发布时间】:2018-07-24 15:18:49
【问题描述】:

对不起,如果这个问题已经问过了,我搜索了很多,但找不到。

我的疑问是,当我在做共享图像/测试的隐式意图时,它会向我显示各种选项,例如 WhatsApp、Facebook、消息等。但是我只想显示 2 个选项,例如Whatsapp 和消息。

对于 WhatsApp,我知道包,但我不知道移动中的消息应用程序。

所以,

  1. 消息应用有默认包名吗?
  2. 如何在隐式意图中包含 2 个包?

提前致谢

【问题讨论】:

    标签: android android-intent android-implicit-intent


    【解决方案1】:

    Q1 的答案:

    使用此方法查找默认包。

    public static String getDefaultSmsAppPackageName(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
            return Telephony.Sms.getDefaultSmsPackage(context);
        else {
            Intent intent = new Intent(Intent.ACTION_VIEW)
                    .addCategory(Intent.CATEGORY_DEFAULT).setType("vnd.android-dir/mms-sms");
            final List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0);
            if (resolveInfos != null && !resolveInfos.isEmpty())
                return resolveInfos.get(0).activityInfo.packageName;
            return null;
        }
    }
    

    第二季度的答案:

     List<Intent> targetedShareIntents = new ArrayList<Intent>();
                    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
                    shareIntent.setType("text/plain");
                    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);
                    if (!resInfo.isEmpty()) {
                        for (ResolveInfo resolveInfo : resInfo) {
                            String packageName = resolveInfo.activityInfo.packageName;
                            Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
                            targetedShareIntent.setType("text/plain");
                            targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "text message to shared");
                            targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "subject to be shared");
                            if (packageName.contains(getDefaultSmsAppPackageName(context))||packageName.contains("com.whatsapp")) {
                                targetedShareIntent.setPackage(packageName);
                                targetedShareIntents.add(targetedShareIntent);
                            }
    
                        }
                        Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
                        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
                        startActivity(chooserIntent);
    

    【讨论】:

    • getDefaultSmsAppPackageName(context)) 函数是什么?
    • 非常感谢兄弟,它成功了。兄弟,你节省了很多时间
    【解决方案2】:

    你可以试试这个

        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_APP_MESSAGING);
        intent.addCategory(Intent.CATEGORY_APP_BROWSER)
        startActivity(intent);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2015-09-23
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      相关资源
      最近更新 更多