2

我想知道作为 App1 的特定应用程序是否安装在我的应用程序上。
这里我不知道那个 App1 的实际包名称(App1 只是名称)。
那么如何找到该应用程序当前是否已安装?
我试过这个,

private static final String PACKAGE_NAME = "App1";

/**
 * Returns true if "App1" is installed. 
 */
public static boolean isApp1Installed( Context context )
{
    boolean output = false;
    PackageManager pm = context.getPackageManager();
    try { 
        PackageInfo pi = pm.getPackageInfo( PACKAGE_NAME, 0 );
        if( pi != null )
        {
            output = true;
        }
    } catch (PackageManager.NameNotFoundException e) {}
    return output;
}

请帮我..

4

3 回答 3

3

您可以使用 PackageManager 通过以下方式获取所有已安装软件包的列表:

getInsatlledPackages

或活动列表

queryIntentActivities 

为了一个意图 CATEGORY_LAUNCHER

通过名称您可以找到该应用程序是否已安装:

String appname = packageManager.getApplicationLabel(pk).toString();

您也可以点击以下链接获得更多帮助:

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

希望它能解决你的问题。

于 2012-08-12T05:52:22.327 回答
2

Qwerty 是正确的,您应该接受他/她的回答,但我想补充一点,在某些情况下此方法无法按预期执行。如果您正在检查市场上的应用程序,那么您应该没有问题。如果您正在检查默认的 Android 系统应用程序之一,您可能会遇到问题(就像我一样)。一些制造商会更换股票消息应用程序之类的东西,您通常可以通过检查包裹是否存在来发现这一点。但是,一家制造商决定以新的包名称替换库存消息应用程序,并使旧包没有任何活动。我解决它的方法是检查 PackageInfo.activities 的大小。如果它是空的,就好像应用程序不存在一样继续。

于 2012-08-12T06:16:10.300 回答
0

您可以检查是否有意图:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.myapp");

if (launchIntent == null) {
    // it is not installed
}
于 2012-09-20T19:31:42.663 回答