android - 在 Android API 30 或更高版本中无法正确获取应用程序名称

标签 android

我想获取 Android 手机上安装的应用程序名称列表。 但是,当我运行代码时,我无法正确获取某些应用程序名称,如下所示。

D/applicationName: com.android.gallery3d.app.GalleryActivity
D/applicationName: Messaging
D/applicationName: Settings
D/applicationName: Maps
D/applicationName: com.android.documentsui.LauncherActivity
D/applicationName: res/menu/example_menu.xml
D/applicationName: res/color/abc_primary_text_material_light.xml

另外,当无法获取正确的应用名称时,会出现以下错误

E/mple.getapplis: Resource 7f100082 is a complex map type.
W/PackageManager: Failure retrieving text 0x7f100082 in package com.android.documentsui
    android.content.res.Resources$NotFoundException: String resource ID #0x7f100082
        at android.content.res.Resources.getText(Resources.java:444)
        at android.app.ApplicationPackageManager.getText(ApplicationPackageManager.java:2004)
        at android.content.pm.ComponentInfo.loadUnsafeLabel(ComponentInfo.java:103)
        at android.content.pm.PackageItemInfo.loadLabel(PackageItemInfo.java:210)
        at android.content.pm.ResolveInfo.loadLabel(ResolveInfo.java:225)
        at com.example.getapplist.MainActivity.onCreate(MainActivity.kt:22)
        at android.app.Activity.performCreate(Activity.java:7994)
        at android.app.Activity.performCreate(Activity.java:7978)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

有时我得到的每个应用程序名称的列表都是正确的,但经过几次构建后,就会出现上述情况。 而这种情况只有当我的代码运行在 api 30 及以上版本时才会出现。 我的代码如下。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val pm = this.packageManager
        val intent = Intent()
        intent.action = Intent.ACTION_MAIN
        intent.addCategory(Intent.CATEGORY_LAUNCHER)
        val applications = pm.queryIntentActivities(intent, 0)
        for (resolverInfo in applications) {
            val applicationName = resolverInfo.loadLabel(pm).toString()
            Log.d("applicationName", applicationName)
        }

    }
}

我已经在 AndroidManifest.xml 中添加了以下设置

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission" />

有谁知道怎么解决吗?

最佳答案

我删除了我的应用程序并重新构建,这个问题解决了!我认为这是IDE的一个错误。

关于android - 在 Android API 30 或更高版本中无法正确获取应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72038007/

相关文章:

java - 双向无限/动态 ViewPager

android - 如何将 DialogFragment 移出中心?

java - Android使用smtp发送邮件到gmail

android - 如何使 btnListShuffleRepeat 在 android 上工作

android - 如何使汉堡菜单完全可见

android - 为什么这个 fragment 的字段为空?

java - 如何修复错误“反编译的 .class 文件字节码版本 52.0 (Java 8)

android - 我如何获得所有 Android 应用程序类别名称?

android - 如何正确清除TextInput?

android - 仅限手机(iPhone 和 Android)的 css