【问题标题】:How to solve queryIntentActivities deprecated in API 33如何解决 API 33 中不推荐使用的 queryIntentActivities
【发布时间】:2022-10-02 02:47:27
【问题描述】:

我在使用 API33 的 Android Studio 中遇到了一个奇怪的行为。在下面的代码中,

Intent chooser = Intent.createChooser(sharingIntent, filename);
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY);

我收到queryIntentActivities(Intent,int) in PackageManager has been deprecated

在文档中,它说:此方法在 API 级别 33 中已弃用。Use queryIntentActivities(android.content.Intent, android.content.pm.PackageManager.ResolveInfoFlags) instead.

我尝试将Intent 更改为android.content.Intent,但遇到了同样的问题。 PackageManager.MATCH_DEFAULT_ONLY 是可能的标志值之一,所以我不明白这个错误试图告诉我什么......

    标签: android android-studio deprecated


    【解决方案1】:

    您当前的电话是:

    queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY)
    

    这里,chooserIntentMATCH_DEFAULT_ONLYint

    匹配the deprecated queryIntentActivities() version

    在 API 级别 33 和更高级别的设备上,Google 希望您使用 the queryIntentActivities() version that takes a ResolveInfoFlags as the second parameter,而不是 int。您将 use ResolveInfoFlags.of()MATCH_DEFAULT_ONLY 包装到 ResolveInfoFlags 对象中。

    该方法在 API 级别 32 和更早的设备上不可用,因此您的选择是:

    • 坚持使用int,尽管已弃用,或者

    • 使用Build.VERSION.SDK_INT确定API级别,并根据设备的API级别调用所需的queryIntentActivities()版本

    【讨论】:

    • 伟大的。 ResolveInfoFlags.of() 是我所缺少的,我对此一无所知。然而,除了Build.VERSION.SDK_INT,我还得加上@SuppressWarnings("deprecation")...
    【解决方案2】:

    这意味着您需要将 InfoFlag 作为第二个参数而不是 int 传递。 Here you can find list of the flags 并从那里您可以检查每一个的用途,以便您可以将其用于您的示例 所以解决方案看起来像

    queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY)
    

    【讨论】:

    • 不,这是我已经做过的,并没有解决问题。毕竟, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY = 65536 是一个 int。
    【解决方案3】:

    我认为我们可以将 PackageManager.MATCH_DEFAULT_ONLY 转换为 long。 像这样的东西:

    queryIntentActivities(intent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2021-04-03
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      相关资源
      最近更新 更多