¿Por qué setDataAndType () para una intención de android funciona bien cuando setData () y setType () no funcionan?

Tuve un problema con la edición de archivos en android con intenciones implícitas, se resolvió saber, Tomó mucho tiempo y permutaciones y combinaciones para resolverlo, pero finalmente me quedo con la duda, El problema se resolvió, pero mi búsqueda para saber por qué El problema resuelto no se resuelve.

Por favor, hágamelo saber si en caso u tiene alguna pista sobre esto.

Llegando a mi problema.

  1. Tengo una actividad. Tengo un botón en la actividad. Quiero abrir un archivo de registro pre existente (que es un ejemplo de archivo de texto log.txt) almacenado en la ubicación "/mnt/sdcard/xxx/log.txt"

  2. El siguiente es el código de intención implícita que escribí y terminé con una excepción "No se encontró actividad"

Code1: que he probado y tengo una excepción

Uri uri = Uri.parse("file:///sdcard/xxx/log.txt"); Intent viewTestLogFileIntent = new Intent(Intent.ACTION_EDIT,uri); viewTestLogFileIntent.setType("text/plain"); 

Code2: que probé y recibí una excepción

 Uri uri = Uri.parse("file:///sdcard/xxx/log.txt"); Intent viewTestLogFileIntent = new Intent(Intent.ACTION_EDIT); viewTestLogFileIntent.setData(uri); viewTestLogFileIntent.setType("text/plain"); 

Code3: lo que intenté y funcionando bien

 Uri uri = Uri.parse("file:///sdcard/xxx/log.txt"); Intent viewTestLogFileIntent = new Intent(Intent.ACTION_EDIT); viewTestLogFileIntent.setDataAndType(uri,"text/plain"); 

Dos dudas que tengo son

  1. En primer lugar mi archivo se encuentra en /mnt/sdcard/xxx/log.txt esto puedo ver claramente en el sistema de archivos en la vista DDMS de eclipse, pero ¿cómo funciona cuando le doy el archivo de enlace en uri como "file: ///sdcard/xxx/log.txt "donde salté / mnt de la ruta

  2. Lo que está mal con code1 y code2? Lo que nunca es los datos y el tipo que estoy estableciendo en code3 estoy configurando los mismos datos y el tipo de intención, pero con diferentes métodos como setData () y setType () por separado. ¿Por qué no funcionan (code2 & code1)? ¿Por qué está funcionando el código 3?

Por favor vea el Javadoc del método setType(String type) en la clase Intent :


Este método borra automáticamente cualquier dato previamente establecido (por ejemplo, setData (Uri)).

Si desea establecer el tipo URI y MIME, no llame a setData () y setType () porque cada uno anula el valor del otro. Utilice siempre setDataAndType () para establecer el tipo URI y MIME.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.