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.
- Comunicación de Android entre Actividades sin onActivityResult
- startActivity overridePendingTransition sólo muestra enter animation
- Comparación del uso del reconocimiento de voz en Android: por Intent o on-thread?
- Diferencia entre putExtra () y setData ()
- ¿Cómo borrar los datos de intención en Actividad después de abrirlos desde url?
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!
- ¿Por qué no puedo pasar los datos a través de Intent?
- Implícita vs intención explícita en Android (startActivity (intención) se bloquea)
- Compartir la imagen con la URL
- ¿Por qué la Intención que inicia mi actividad no contiene los datos extras que pongo en la Intención que envié a startActivity ()?
- Synchronous startActivityForResult - Esperando que la actividad se complete
- Cómo probar Google App Invites
- Cómo mostrar la actividad transparente en la otra actividad sin eliminar la actividad anterior
- Pasar múltiples banderas a una intención en android
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);
- Registrar un receptor de difusión de un servicio en un nuevo hilo
- Retrofit + OkHTTP – la caché de respuestas no funciona