Cómo acceder a los datos de datos adjuntos de Gmail en mi aplicación

Tengo una aplicación que utiliza un tipo de archivo binario (.gcsb) creado específicamente. Estos archivos se guardan en una carpeta en la tarjeta sd.

En el momento en que se mueven en y fuera con ES explorador de archivos o el fabricante del teléfono 'se comportan como una unidad USB' utilidades de transferencia. Clunky. Lo que quiero es poder enviar los archivos por correo electrónico al teléfono, luego abrir los archivos como archivos adjuntos desde dentro de gmail, lo que debería activar la aplicación, que luego los guardará en la carpeta de la tarjeta SD adecuada.

He encontrado algunas cosas acerca de la creación de intentos de – con suerte – iniciar la aplicación en hacer clic en 'vista previa' dentro de gmail (específicamente Abra adjunto personalizado de Gmail en mi aplicación para Android ), pero lo que no estoy seguro de es cómo acceder Los datos del archivo! Supongo que debe ser con una de las funciones Intent.get … Extra (), pero que, y cómo usarlo?

Se enteró de cómo hacerlo. Esperemos que esto pueda ayudar a alguien más. Mina del partido, en parte de otros postes. Se trata de manejar archivos adjuntos .gcsb.

El filtro de intenciones es

<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="application/octet-stream" /> </intent-filter> 

Y el código en la actividad onCreate () / onRestart () es

 Intent intent = getIntent(); InputStream is = null; FileOutputStream os = null; String fullPath = null; try { String action = intent.getAction(); if (!Intent.ACTION_VIEW.equals(action)) { return; } Uri uri = intent.getData(); String scheme = uri.getScheme(); String name = null; if (scheme.equals("file")) { List<String> pathSegments = uri.getPathSegments(); if (pathSegments.size() > 0) { name = pathSegments.get(pathSegments.size() - 1); } } else if (scheme.equals("content")) { Cursor cursor = getContentResolver().query(uri, new String[] { MediaStore.MediaColumns.DISPLAY_NAME }, null, null, null); cursor.moveToFirst(); int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME); if (nameIndex >= 0) { name = cursor.getString(nameIndex); } } else { return; } if (name == null) { return; } int n = name.lastIndexOf("."); String fileName, fileExt; if (n == -1) { return; } else { fileName = name.substring(0, n); fileExt = name.substring(n); if (!fileExt.equals(".gcsb")) { return; } } fullPath = ""/* create full path to where the file is to go, including name/ext */; is = getContentResolver().openInputStream(uri); os = new FileOutputStream(fullPath); byte[] buffer = new byte[4096]; int count; while ((count = is.read(buffer)) > 0) { os.write(buffer, 0, count); } os.close(); is.close(); } catch (Exception e) { if (is != null) { try { is.close(); } catch (Exception e1) { } } if (os != null) { try { os.close(); } catch (Exception e1) { } } if (fullPath != null) { File f = new File(fullPath); f.delete(); } } 

Parece que funciona en las aplicaciones estándar de Gmail y correo electrónico de Android. El nombre de archivo se obtiene de dos maneras diferentes dependiendo de si se ha pulsado 'download' (esquema de archivos) o 'preview' (esquema de contenido) en gmail.

Tenga en cuenta que es sumamente importante que la actividad no esté configurada como instancia única.

Nwm01223 'la respuesta es correcta! Una pequeña adición: Su respuesta sólo funciona para ACTION_VIEW. Si agregas

 Uri uri = null; if(Intent.ACTION_VIEW.equals(action)){ uri = intent.getData(); } else if(Intent.ACTION_SEND.equals(action)){ uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); } 

También funcionará para ACTION_SEND

  • ¿Cómo puedo hacer que una aplicación en android se inicie automáticamente cuando llega un correo electrónico?
  • Cómo convertir una imagen Drawable de recursos a un mapa de bits
  • ¿Cómo enviar correo electrónico en Android?
  • Obtener el registro de fallos y enviarlo como correo electrónico
  • Enviar correo electrónico automáticamente desde la aplicación de Android a través de Exchange Server
  • Cómo escribir el código para la configuración de Clear Email Client en android?
  • Android envía correo electrónico con texto e imágenes
  • Detección automática de número de teléfono, correo electrónico y enlace URL en Webview - Android sdk
  • Envío de imagen por correo electrónico, Android?
  • Enviar correo automáticamente en fondo en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.