我正在尝试从Google Play安装应用。我了解到,打开Google Play商店URL时,它会打开Google Play,当我按“后退”按钮时, Activity 将恢复。
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(marketIntent);
回到 Activity 之后,我尝试调用此
onResume()
来检查该应用程序是否已安装,但出现错误:@Override
protected void onResume() {
super.onResume();
boolean installed = false;
while (!installed) {
installed = appInstalledOrNot(APPPACKAGE);
if (installed) {
Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show();
}
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
错误如下:
我猜 Activity 是
onPause()
。有没有更好的方法来实现它?我正在尝试检查应用程序是否已完成安装。 最佳答案
尝试这个:
private boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
packageManager.getPackageInfo(packageName, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
它尝试获取有关您传入名称的软件包的信息。否则,如果抛出了
NameNotFoundException
,则意味着没有安装具有该名称的软件包,因此我们返回false
。请注意,我们传入的是
PackageManager
而不是Context
,因此该方法的使用灵活性更高,并且不会违反law of Demeter。只要您具有Context
实例,就可以使用该方法而无需访问PackageManager
实例。像这样使用它:
public void someMethod() {
// ...
PackageManager pm = context.getPackageManager();
boolean isInstalled = isPackageInstalled("com.somepackage.name", pm);
// ...
}