1

我有一个安装其他应用程序的 3p appstore 应用程序。从我的应用程序中,支持安装单个和拆分 APK。

对于具有拆分 APK 的应用程序,在安装期间,我只安装所需的 APK,例如仅在设备上安装所选语言的 APK。

现在,当设备语言发生变化时,我想为我的应用程序安装的所有应用程序安装新的语言 APK。在触发安装之前,我需要首先检查是否已经安装了该语言的 APK,或者为特定包名称安装了哪些所有 APK。

在 Android 中,如果安装了某些语言 APK 或有关所有已安装 APK 的信息,我没有找到任何可以给我的 API。有什么办法可以得到这些信息?

Edit-1:我不能使用 Play 核心库。我正在寻找一种使用 Android 类的方法。

4

2 回答 2

1

这是不可能的。使用您已安装的应用程序的包名称,您可以从 PackageInfo.#applicationInfo 获取所有拆分的 APK,但不提供任何额外信息。

Playcore 有一些类,例如 SplitInstallManager,它具有 getInstalledModules、getInstalledLanguages 等方法,可用于获取已安装的 APK,但不确定您是否也可以获取有关其他应用程序的信息。

于 2021-09-06T05:51:33.197 回答
0

代码:

public static boolean isConfigInstalled(PackageManager pm, String pkg, String conf) throws PackageManager.NameNotFoundException
{
    // get application info for installed app
    ApplicationInfo ai=pm.getApplicationInfo(pkg, 0);
    
    // get installed split's Names
    String[] sn=ai.splitNames;

    // check whether if it's really split or not
    if (sn != null && sn.length > 0)
    {
        // search installed splits
        for(String n:sn){
            // check whether is the one required
            if(n.equals("config." + conf)){
                // yes, it's installed!
                return true;
            }
        }
    }
    // couldn't find!
    return false;
}

如何使用:

只需传递您通过context.getPackageManager()获得的包管理器以及应用程序的包名称语言代码

例子:

        PackageManager pm=getPackageManager();
        String pkg="com.snapchat.android";
        String languageCode="ur";
        if(isConfigInstalled(pm, pkg, languageCode)){
            System.out.println("Snapchat has Urdu Installed!");
        }else{
            System.out.println("Snapchat doesn't has Urdu Installed!");
        }

输出:

    Snapchat has Urdu Installed!
于 2021-11-25T20:21:22.357 回答