结果代码始终为0,因为卸载了Android中的Intent

pyu*_*s13 5 android android-intent android-activity

从我的应用程序我试图通过使用代码卸载应用程序

Intent uninstallIntent = new Intent(Intent.ACTION_DELETE);
uninstallIntent.setData(Uri.parse("package:" +packageName));
uninstallIntent.setAction(Intent.ACTION_VIEW);
startActivityForResult(uninstallIntent,UNINSTALL_APPLICATION);
Run Code Online (Sandbox Code Playgroud)

根据我开始的结果活动我想根据用户的输入执行不同的操作,如果取消或点击确定.

正如我所料,点击确定的结果代码将是,RESULT_OK并且点击取消将是RESULT_CANCEL,但实际上在两种情况下我得到RESULT_CANCEL.

那么我该如何区分用户的输入.

谢谢!

pyu*_*s13 10

经过深思熟虑后,我终于得到了解决方案.

我是如何在调用卸载Intent时实现的,我已经使用了将包名保存在首选项文件中

SharedPreferences prefs;
prefs.edit().putString(DELETE_PACKAGE_NAME, packageName).commit();
Run Code Online (Sandbox Code Playgroud)

我在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
    }


 }

}
Run Code Online (Sandbox Code Playgroud)

检查应用程序存在的代码

public static boolean  isAppPresent(String packageName,Context context) {


  try{
    ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName, 0 );
    return true;

} catch( PackageManager.NameNotFoundException e ){

   return false;
}

 }
Run Code Online (Sandbox Code Playgroud)

谢谢.