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.
- Recuperar correo electrónico de la cuenta de Google Plus en la aplicación para Android
- enviar correo electrónico desde android con img incrustado no funciona
- ¿Cómo puedo iniciar mi aplicación a través de una URL personalizada en un correo electrónico
- Acceder a contactos y obtener dirección de correo electrónico
- No se puede agregar el archivo del almacenamiento interno como adjunto de correo electrónico
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?
- Android exportar a csv y enviar como adjunto de correo electrónico
- Notificación de correo electrónico nuevo con Android
- Enviar correo electrónico en la aplicación de Android
- Android - obtener un error "ninguna aplicación puede realizar esta acción" al intentar enviar un correo electrónico?
- Android Facebook obtiene la dirección de correo electrónico de acceso a través de token de acceso
- Android: ¿Cómo adjunto una imagen temporal generada a un correo electrónico?
- Android: ¿Cómo enviar una imagen como adjunto de correo electrónico desde la aplicación?
- Android - Cómo ejecutar la intención de JavaScript
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
- ¿Por qué no se puede mostrar la carpeta "datos" como en el explorador de archivos DDMS?
- Encadenamiento de solicitudes en Retrofit + RxJava