如何以编程方式获取APK的应用程序名称(未安装)

fwo*_*oop 2 android

基于如何在Android中获取应用程序的名称?.

我有这个片段.`andPath | 是APK的位置.

PackageInfo info = getPackageManager().getPackageArchiveInfo(andPath, 0);
ApplicationInfo appinfo = info.applicationInfo;
String packageName = getPackageManager().getApplicationLabel(appinfo).toString();

PackageManager pm=getPackageManager();
ApplicationInfo ai;
try {
     ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
     ai = null;
}

final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
Run Code Online (Sandbox Code Playgroud)

applicationName 返回包名称.

CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName,PackageManager.GET_META_DATA));
Run Code Online (Sandbox Code Playgroud)

c返回我null.

有谁知道我在这里缺少什么?

Ale*_*pov 5

这是你如何从not yet installedAPK文件获取应用程序标签:

public static String getAppLabel(PackageManager pm, String pathToApk) {  
    PackageInfo packageInfo = pm.getPackageArchiveInfo(pathToApk, 0);

    if (Build.VERSION.SDK_INT >= 8) {
        // those two lines do the magic:
        packageInfo.applicationInfo.sourceDir = pathToApk;
        packageInfo.applicationInfo.publicSourceDir = pathToApk;
    }

    CharSequence label = pm.getApplicationLabel(packageInfo.applicationInfo);
    return label != null ? label.toString() : null;
}
Run Code Online (Sandbox Code Playgroud)

无需修补applicationInfoSDK 8之前的版本.有关更多详细信息,请参阅此问题.