检查是否安装了多个应用程序

时间:2018-03-28 08:19:11

标签: java android

我想检查用户设备中是否安装了多个应用程序,并始终获得Toast当前未安装应用程序但安装了whatsapp和instagram。为什么呢?

  String [] strings = new String [] {"com.whatsapp", "com.android.instagram" };
        List<String> stringList = new ArrayList<String>(Arrays.asList(strings)); 



        boolean isAppInstalled = appInstalledOrNot(String.valueOf(stringList));
        if(isAppInstalled) {

            Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(String.valueOf(stringList));startActivity(LaunchIntent);
            Toast.makeText(MainActivity.this,"Application is already installed.",Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this,"Application is not currently installed.",Toast.LENGTH_SHORT).show();
        }
    }

    private boolean appInstalledOrNot(String uri) {
        PackageManager pm = getPackageManager();
        try {
            pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
        }

        return false;
    }

2 个答案:

答案 0 :(得分:0)

你输错了参数。尝试类似下面的内容。

 private boolean appInstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
    }

    return false;
}

public void check(){
String [] strings = new String [] {"com.whatsapp", "com.android.instagram" };
for(String appPackageName: strings) {
    boolean isAppInstalled = appInstalledOrNot(appPackageName);
    if(isAppInstalled) {
        Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(appPackageName);
        startActivity(LaunchIntent);
        Toast.makeText(MainActivity.this,appPackageName+" is already installed.",Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(MainActivity.this,appPackageName+" is not currently installed.",Toast.LENGTH_SHORT).show();
    }
}
}

注意: - 不要在循环中触发LaunchIntent。首先检查哪些应用程序已安装,然后您可以从列表中进行选择(根据您的需要,我不知道它)。

或者你可以直接分别检查每一个:

 boolean isWhatsAppinstalled = appInstalledOrNot("com.whatsapp");
 boolean isInstainstalled = appInstalledOrNot("com.android.instagram");

答案 1 :(得分:0)

由于您从https://stackoverflow.com/a/36419540/4467208复制粘贴此代码,因此您实际上也应根据需要对其进行修改。您无法将字符串连接传递给appInstalledOrNot,因为它不支持它。

而是将其更改为

boolean isAppInstalled = appInstalledOrNot("com.whatsapp") && appInstalledOrNot("com.android.instagram");

如果您想针对不同情况显示不同的Toasts,则必须逐个调用appInstalledOrNot

相关问题