我想检查用户设备中是否安装了多个应用程序,并始终获得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;
}
答案 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
。