El código de resultado es siempre 0 como resultado de la intención de desinstalación en android

Desde mi aplicación estoy intentando desinstalar una aplicación usando el código

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

como por lo que estoy empezando la actividad de resultado quiero realizar diferentes acciones sobre la base de la entrada del usuario como si se canceló o clic en ok.

Como esperaba el código de resultado de hacer clic en ok será RESULT_OK y haciendo clic en cacel será RESULT_CANCEL, pero en realidad en ambos casos estoy obteniendo RESULT_CANCEL.

Entonces, ¿cómo puedo diferenciar la entrada del usuario.

¡Gracias!

Después de un montón de pensamientos en mente, finalmente tengo la solución difícil.

Cómo lo implementé en el momento de llamar a la intención de desinstalación He guardado el nombre del paquete en un archivo de preferencias usando

 SharedPreferences prefs; prefs.edit().putString(DELETE_PACKAGE_NAME, packageName).commit(); 

Y lo que he hecho en OnActivityresult acabo de comprobar si la aplicación con el nombre del paquete guardado sigue presente si es el usuario significa que ha hecho clic en Cancelar, sino que hizo clic en 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 } } } 

Código para comprobar la presencia de la aplicación

 public static boolean isAppPresent(String packageName,Context context) { try{ ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName, 0 ); return true; } catch( PackageManager.NameNotFoundException e ){ return false; } } 

Gracias.

Por la API , ACTION_DELETE no devuelve nada. Si no se devuelve nada, el estado del resultado será RESULT_CANCEL .

Lo mejor es configurar un filtro de intención / receptor de difusión escuchando la intención de ACTION_PACKAGE_FULLY_REMOVED . Hay una pregunta sobre lo anteriormente preguntado aquí .

Prueba esto

 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); 
  • Cómo adjuntar archivos múltiples al cliente de correo electrónico en android
  • Cómo crear un widget de pantalla de bloqueo personalizado (sólo quiero mostrar un botón)
  • Cómo precargar el anuncio intersticial de AdMob y enviarlo a otra actividad de android utilizando la intención
  • TIMEZONE_CHANGED intención que se recibe cada pocos segundos
  • Android.Share a las redes sociales
  • Android: ¿puedo pasar un parámetro al iniciar otras aplicaciones de mi aplicación?
  • Compruebe la conexión a Internet de INTENT
  • Detectar si un auricular está conectado a un dispositivo Android o no.
  • El gestor de paquetes ha muerto
  • Intención putExtra ArrayList <NameValuePair>
  • ¿Cómo usar putExtra () con FLAG_ACTIVITY_REORDER_TO_FRONT en las aplicaciones de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.