Lui*_*rit 21 android deprecated android-studio
我在使用 API33 的 Android Studio 中遇到了奇怪的行为。在下面的代码中,
Intent chooser = Intent.createChooser(sharingIntent, filename);
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY);
Run Code Online (Sandbox Code Playgroud)
我正进入(状态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是可能的标志值之一,所以我不明白这个错误试图告诉我什么......
Com*_*are 30
您当前的通话是:
queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY)
Run Code Online (Sandbox Code Playgroud)
这里,chooser是一个Intent,并且MATCH_DEFAULT_ONLY是一个int。
这与已弃用的queryIntentActivities()版本相匹配。
在 API 级别 33 及更高版本的设备上,Google 希望您使用将 a作为第二个参数的版本queryIntentActivities()ResolveInfoFlags,而不是int。您可以使用ResolveInfoFlags.of()包装MATCH_DEFAULT_ONLY到一个ResolveInfoFlags对象中。
该方法在 API 级别 32 及更旧的设备上不可用,因此您的选择是:
坚持使用那个int,尽管不赞成,或者
用于确定API级别并根据设备的API级别Build.VERSION.SDK_INT调用所需的版本queryIntentActivities()
小智 15
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context.packageManager.queryIntentActivities(
Intent(Intent.ACTION_MAIN, null).addCategory(Intent.CATEGORY_LAUNCHER),
PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong())
)
} else {
context.packageManager.queryIntentActivities(
Intent(Intent.ACTION_MAIN, null).addCategory(Intent.CATEGORY_LAUNCHER),
PackageManager.GET_META_DATA
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12640 次 |
| 最近记录: |