我想获取 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/