如何查找特定应用程序是否按其名称安装?

时间:2012-08-12 05:37:43

标签: android

我想知道特定应用程序作为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;
}

请帮助我..

3 个答案:

答案 0 :(得分: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

希望它能解决你的问题。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您可以检查是否有意图:

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

if (launchIntent == null) {
    // it is not installed
}