从我的应用程序中我尝试使用代码
卸载应用程序Intent uninstallIntent = new Intent(Intent.ACTION_DELETE);
uninstallIntent.setData(Uri.parse("package:" +packageName));
uninstallIntent.setAction(Intent.ACTION_VIEW);
startActivityForResult(uninstallIntent,UNINSTALL_APPLICATION);
根据我开始结果的活动,我想根据用户的输入执行不同的操作,如取消或点击 ok 。
正如我所料,单击确定的结果代码为RESULT_OK
,点击取消将为RESULT_CANCEL
,但实际上在两种情况下我都会RESULT_CANCEL
。
那么如何区分用户的输入呢。
谢谢!
答案 0 :(得分:9)
经过深思熟虑后,我终于得到了解决方案。
我是如何在调用卸载意图时实现的,我已使用
将包名保存在首选项文件中SharedPreferences prefs;
prefs.edit().putString(DELETE_PACKAGE_NAME, packageName).commit();
我在OnActivityresult中所做的事情我刚检查了保存包名称的应用程序是否仍然存在,如果它意味着用户点击了取消,否则他点击确定
@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;
}
}
感谢。
<强>更新:强>
平台发生了很大的变化,因为我在这里回答的是更新
现在你可以使用一个intent来明确定义它是否应该返回结果
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开始,上述更新方法也已弃用。
答案 1 :(得分:4)
每the API,ACTION_DELETE
不会返回任何内容。如果未返回任何内容,则结果状态将为RESULT_CANCEL
。
您最好的选择是设置Intent Filter / Broadcast Receiver收听ACTION_PACKAGE_FULLY_REMOVED
意图。关于此前问过的here有一个问题。
答案 2 :(得分:1)
试试这个
Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
intent.setData(Uri.parse("package:" + packageName));
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
startActivityForResult(intent, Constants.FROM_UNINSTALL);