getPackageManager().getInstalledPackages()
是 Android 开发中用于获取设备上已安装应用列表的方法,其崩溃可能由以下原因及解决方案导致:
该方法属于 PackageManager
类,通过 PackageManager.GET_META_DATA
等标志位返回 PackageInfo
列表,包含应用包名、版本等元数据。需注意:
QUERY_ALL_PACKAGES
权限(非系统应用可能受限)。SecurityException
或返回空列表。<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
。AndroidManifest.xml
是否声明权限。queryIntentActivities()
或仅查询自身应用信息。OutOfMemoryError
。PackageInfo
列表过大(如设备安装数千应用)。IllegalArgumentException
。MATCH_UNINSTALLED_PACKAGES
对非系统应用无效)。0
或 PackageManager.GET_META_DATA
)。PackageManager.getApplicationInfo()
查询特定应用。Intent.resolveActivity()
检查特定功能是否可用。fun loadInstalledApps(context: Context, callback: (List<PackageInfo>) -> Unit) {
CoroutineScope(Dispatchers.IO).launch {
try {
val packages = context.packageManager.getInstalledPackages(0)
withContext(Dispatchers.Main) { callback(packages) }
} catch (e: SecurityException) {
Log.e("PackageUtils", "Permission denied", e)
}
}
}
崩溃通常由线程阻塞、权限缺失或内存问题引发。建议异步调用、检查权限声明,并合理处理大数据量场景。若仅需检测特定应用是否存在,优先使用更精准的 API 替代全局查询。
没有搜到相关的文章