Android:通过Gmail共享zip文件

时间:2012-04-29 09:26:41

标签: android gmail mime-types

我正在开发一款Android应用程序,允许用户通过Gmail分享他们的内容。我正在使用Android 2.2版(Froyo)。 问题是我找不到任何有效的解决办法,我几乎尝试了一切,但没有运气。 这是我正在使用的代码:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);;
sharingIntent.setType("application/zip");

sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
getString(R.string.share_subject));
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.share_body));

String zipFile = FileProvider.URI_AUTHORITY + File.separator + mItemSelected.getLibraryName() + File.separator + mItemSelected.getZipFileName();

sharingIntent.putExtra(Intent.EXTRA_STREAM, android.net.Uri.parse(zipFile));
startActivity(Intent.createChooser(sharingIntent, (getString(R.string.share_chooser))));
}

在这种情况下的问题是Gmail应用程序,没有明显的原因,正在替换文件的mime类型,并将文件显示为text / html,然后我的应用程序未显示在应用程序列表中,可以处理这种文件。另一个限制是我不想在我的意图过滤器中使用text / html,因为我希望它尽可能地集中,如果有可能我会定义我自己的mime类型...

我做了一点研究,发现了question,但没有答案......

我尝试了更多mime类型:

application/x-compressed, application/x-zip-compressed
multipart/x-zip and application/octet-stream

这个问题有解决方法吗?

感谢。

2 个答案:

答案 0 :(得分:4)

经过很多麻烦后,我发现通过Intent启动的Gmail不喜欢前缀为.zip的附件。 所以,在重命名为“.vip”后,我成功发送了附件。 这是一段代码(outFile是一个重命名为“.vip”的压缩文件):

enter 
   private void sendMail(File outFile) {
        Uri uriToZip = Uri.fromFile(outFile);
        String sendText = "Dear friend,\n\n...";

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
            new String[] { "checcodotti@gmail.com" });
        sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, sendText);
        sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Log of the test " +  expFilename);

    //   sendIntent.setType("image/jpeg");
    //   sendIntent.setType("message/rfc822");
         sendIntent.setType("*/*");
         sendIntent.putExtra(android.content.Intent.EXTRA_STREAM, uriToZip);
         startActivity(Intent.createChooser(sendIntent, "Send Attachment !:"));
    }

如果有帮助,请告诉我。 问候 FD

答案 1 :(得分:0)

我改进了之前关于“拉链”部分的答案。现在通过GMail发送的.zip附件没有问题。试试这个:

 {  
              int lung;  
              FileInputStream in;  
              FileOutputStream out;  
              byte[] buffer = new byte[DIM_BUFFER];  
    // compress the file to send  
              String inPath = ctx.getApplicationContext().getFilesDir().getAbsolutePath();  
              outFile = new File(outPath,TestEdit.ZIPNAME);  
              // outFile = new File(outPath,filename + ".vip");  
              in = new FileInputStream(inFile);  
              ZipEntry entry = new ZipEntry(filename + ".csv");  
              try{  
                  out = new FileOutputStream(outFile);  
              // GZIPOutputStream zos;  
                  ZipOutputStream zos;  
                  zos = new ZipOutputStream(new BufferedOutputStream(out) );  
                  zos.putNextEntry(entry);  
                  try {  
                      while ((lung=in.read(buffer)) > 0) {  
                          Log.v(TAG, "Lunghezza di in=" + lung + ". Lungh di buffer=" + buffer.length );  
                          if (buffer.length == lung) {  
                              zos.write(buffer);  
                          } else {  
                              // Gestione del caso in cui il buffer non sia pieno  
                              for (int b = 0; b < lung; b++) {  
                                  zos.write(buffer[b]);  
                              }  
                          }  
                      }  
                  } finally {  
                      zos.closeEntry();  
                      zos.close();  
                      in.close();  
                      out.close();  
                  }  
    }  
  }