经过深思熟虑后,我终于找到了一个棘手的解决方案。
在调用卸载意图时我是如何实现的,我已通过使用将包名称保存在首选项文件中
SharedPreferences prefs;
prefs.edit().putString(DELETE_PACKAGE_NAME, packageName).commit();
而我在 OnActivityresult 中所做的我刚刚检查了保存包名称的应用程序是否仍然存在,如果这意味着用户点击了Cancel,否则他点击了Ok。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==DELETE_APP){
String requestedPackageName=prefs.getString(DELETE_PACKAGE_NAME, "");
boolean isPresent=GCMIntentService.isAppPresent(requestedPackageName, this);
if(isPresent){
//user Clicked on Cancel
}else{
//user Clicked on Ok
}
}
}
检查应用程序存在的代码
public static boolean isAppPresent(String packageName,Context context) {
try{
ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName, 0 );
return true;
} catch( PackageManager.NameNotFoundException e ){
return false;
}
}
谢谢。
更新:
自从我回答这个问题以来,平台发生了很大变化,这是更新
现在您可以使用一个意图,您可以在其中明确定义它是否应该返回结果
val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE).apply {
data = Uri.parse("package:$packageName")
putExtra(Intent.EXTRA_RETURN_RESULT, true)
}
startActivityForResult(intent, YOUR_REQUEST_CODE_HERE)
文档:https ://developer.android.com/reference/android/content/Intent.html#ACTION_UNINSTALL_PACKAGE
这将返回一个结果
从文档中:
返回的结果代码将是 Activity.RESULT_OK 成功或 Activity.RESULT_FIRST_USER 失败。
启动 API 21 Android 添加了辅助方法
PackageInstaller.uninstall (String packageName,
IntentSender statusReceiver)
在下面的链接中阅读有关更改的更多信息,从 Android Q 中说明上述更新的方法也已弃用。
https://developer.android.com/reference/android/content/pm/PackageInstaller.html#uninstall(java.lang.String,%20android.content.IntentSender)