Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Error: No se puede adjuntar archivo vacío en la aplicación GMAIL usando el proveedor de archivos

Estoy tratando de adjuntar un archivo pdf en la aplicación de Gmail. He leído esto y esto (solución aplicada) estoy tratando como;

 public static void attachFile(Context ctx) { String TAG = "Attach"; File documentsPath = new File(ctx.getFilesDir(), "documents"); Log.i(TAG,"documentsAbsolutePath Output"); Log.i(TAG, documentsPath.getAbsolutePath().toString()); File file = new File(documentsPath, "sample.pdf"); if ( file.exists() ) { Toast.makeText(ctx, "Exits", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(ctx, "Not Exist", Toast.LENGTH_LONG).show(); } Log.i(TAG,"file Output"); Log.i(TAG, file.toString()); Log.i(TAG, String.valueOf(file.length())); Uri uri = FileProvider.getUriForFile(ctx, "com.example.fyp_awais.attachfiletest2.fileprovider", file); Log.i(TAG,"URI Output"); Log.i(TAG,uri.toString()); Intent intent = ShareCompat.IntentBuilder.from((Activity) ctx) .setType("application/pdf") .setStream(uri) .setChooserTitle("Choose bar") .createChooserIntent() .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); ctx.startActivity(intent); } 

Salidas

 documentsAbsolutePath Output /data/data/com.example.fyp_awais.attachfiletest2/files/documents file Output /data/data/com.example.fyp_awais.attachfiletest2/files/documents/sample.pdf 0 URI Output content://com.example.fyp_awais.attachfiletest2.fileprovider/pdf_folder/sample.pdf 

Menifest

 <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.fyp_awais.attachfiletest2.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepath" /> </provider> 

FilePath.xml

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="pdf_folder" path="documents/"/> </paths> </PreferenceScreen 

Un archivo pdf se guarda en Galaxy Core Prime\Phone\documents . (Tamaño de archivo: 53.7KB)

Pero da

No se puede adjuntar archivo vacío.

Introduzca aquí la descripción de la imagen

Estoy confundido con folder-name en esta línea <files-path name="pdf_folder" path="documents/"/> . El archivo está en \Phone\documents . Entonces, ¿por qué nombre de la carpeta?

Editar 1

Trató de reemplazar setType(application/pdf) con setType("message/rfc822") Pero no funcionó. ¿Alguna ayuda?

  • ¿Dónde puedo encontrar el código fuente para las aplicaciones de gmail, facebook y twitter para Android? ¿Son incluso de código abierto?
  • Reemplazar + con espacio en html Gmail / Android cromo
  • ¿Cómo pasar el hipervínculo a Gmail en Intent ACTION_SEND?
  • Android: cómo abrir una vista de compositor de correo?
  • Enviar correo electrónico HTML con Gmail 4.2.1
  • ProgressBar en ActionBar, como la última actualización de la aplicación de GMail
  • Android que envía correo electrónico con archivos adjuntos no siempre funciona
  • ¿Cómo puedo configurar gmail en el emulador de Android?
  • 6 Solutions collect form web for “Error: No se puede adjuntar archivo vacío en la aplicación GMAIL usando el proveedor de archivos”

    Envíe el archivo en formato URI como este:

     Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); emailIntent.setData(Uri.parse("mailto:")); emailIntent.setType("application/image"); emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); emailIntent.putExtra(Intent.EXTRA_CC, CC); ArrayList<Uri> uris = new ArrayList<>(); //convert from paths to Android friendly Parcelable Uri's uris.add(frontImageUri); uris.add(backImageUri); emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

    Si está bien Enviar Zip luego intente de esta manera

    String fileNameStor_zip = Environment.getExternalStorageDirectory () + "/" + fileName + ".zip";

    String [] path = {su 1ª ruta de archivo pdf, su 2ª ruta de archivo pdf};

    Comprimir compress = new Comprimir (path, fileNameStor_zip);

    Compress.zip ();

    URI = Uri.parse ("file: //" + fileNameStor_zip);

    Proporcionar tu intención de Gmail

    Intent.putExtra (Intent.EXTRA_STREAM, URI);

     Uri contentUri = FileProvider.getUriForFile(this, "com.mydomain.fileprovider", newFile); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); i.setData(contentUri); 
     String filename="my_file.vcf"; File filelocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename); Uri path = Uri.fromFile(filelocation); Intent emailIntent = new Intent(Intent.ACTION_SEND); // set the type to 'email' emailIntent .setType("vnd.android.cursor.dir/email"); String to[] = {"asd@gmail.com"}; emailIntent .putExtra(Intent.EXTRA_EMAIL, to); // the attachment emailIntent .putExtra(Intent.EXTRA_STREAM, path); // the mail subject emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject"); startActivity(Intent.createChooser(emailIntent , "Send email...")); 

    Tienes que conceder el permiso para acceder al almacenamiento para gmail.

    En caso de que ayuda- aquí es lo que hago en una función de depuración de la aplicación con unos pocos archivos, no debería ser realmente diferente. Lo copio / exporto en una carpeta pública de usuario primero antes de adjuntarlos y hacerlos legibles en todo el mundo.

      if (verifyStoragePermissions(c)) { final Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"recipient@email.address"}); intent.putExtra(Intent.EXTRA_SUBJECT, "Email Subject"); //build up message ArrayList<Uri> uris = new ArrayList<>(); StringBuilder content = new StringBuilder(); content.append( String.format( c.getString(R.string.message_log_upload_email_body) + "\n\nmodelDesc:%s \n\nmanuf:%s \n\naId: %s,\n\nhIid: %s,\n\nfbId: %s.", Build.MODEL, Build.MANUFACTURER, getSomeVar1(), getSomeVar2(), getSomeVar3()) ); content.append("\n\nMy logged in account id is: ").append(getAccountId(c)).append("."); content.append("\n\nHere's an overview of my attachments:\n"); for (String s : addresses) { File f = new File(s); //noinspection ResultOfMethodCallIgnored f.setReadable(true, false); Uri add = Uri.fromFile(f); //add attachment manifest content.append(String.format(Locale.UK, "|-> %s (%.3f kb)\n", f.getName(), (float) f.length() / 1024)); uris.add(add); } //attach the things intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); //set content/message intent.putExtra(Intent.EXTRA_TEXT, content.toString()); c.startActivity(intent); } } 

    addresses es un String [] param para esa función. Lo construyo haciendo que las funciones que utilizo para exportar los archivos devuelven arreglos de cadenas de las direcciones de los archivos que han exportado – como inicialmente almacenar los archivos en el almacenamiento privado de mi aplicación

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