【问题标题】:queryIntentActivities method returns empty List for API level 23 (Marshmallow) and belowqueryIntentActivities 方法返回 API 级别 23 (Marshmallow) 及以下的空列表
【发布时间】:2018-08-13 17:45:59
【问题描述】:

我正在尝试检查所有已安装应用程序处理“Intent.ACTION_SENDTO”的能力,为此我使用了以下 sn-p 代码。

        Intent mailIntent = new Intent(Intent.ACTION_SENDTO);
        infos = manager.queryIntentActivities(mailIntent, 0);
        Log.i(TAG,"number of apps that can hadle ACTION_SENDTO "+infos.size());
        if(infos.size()>0){
            //do actions
        }

这个 sn-p 似乎为 Android N 及更高版本提供了正确的结果,但对于 API 级别 23 及以下,此 sn-p 给了我 emptyList。然而,有趣的部分甚至对于 API 级别 23 和 Intent.ACTION_SENDTO 以下的设备是由邮件应用程序处理的,当我运行以下 sn-p 时,电子邮件应用程序就会启动

Intent i = new Intent(Intent.ACTION_SENDTO,Uri.parse(UIConstants.EMAIL_URI+mEmail));
                    startActivity(i);

谁能帮我理解为什么infos.size() 在我的第一个 sn-p 中为 API 级别 23 及以下级别返回 0

【问题讨论】:

    标签: android android-intent intentfilter


    【解决方案1】:

    尝试检查您是否可以处理意图:

    PackageManager packageManager = getActivity().getPackageManager();
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent);
    } else {
        Log.d(TAG, "No Intent available to handle action");
    }
    

    【讨论】:

    • 尝试用上面的 sn-p 检查,但不工作。检查应用程序是否可以处理意图的任何其他方法
    【解决方案2】:

    设置数据应该可以解决问题。 mailIntent.setData(Uri.parse("mailto:"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2018-06-07
      • 2020-08-08
      • 1970-01-01
      相关资源
      最近更新 更多