我已经知道可能有类似的问题,因为我从其中一个答案中得到了我当前的代码。但我面临一些问题,最初我认为它是gmail应用程序,但后来我尝试与其他电子邮件客户端和同样的问题。 的代码: -
ArrayList<Uri> uris = null;
try {
uris = logger.getSiteFilePaths(siteIndex);
} catch (BaseLoggerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("application/octet-stream");
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.putExtra(Intent.EXTRA_EMAIL,"");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Bl\u00fc-Test Log");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Please find the attachments.");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(emailIntent, "Email:"));
文件路径准确
**e.g. --** file:///storage/sdcard0/BAPISandy_test1.csv
问题: - 在Gmail应用程序文件中似乎附加了,但是当您发送电子邮件时,它会在通知栏中显示“无法显示attachemnt”。如果尝试使用其他电子邮件客户端,则不会将文件显示为附件。 系统信息: - 三星Galaxy Tab 2(7英寸) Android 4.1.1
答案 0 :(得分:1)
抱歉全部,
很难找到文件路径中遗漏"/"
等小错误,这实际上会导致问题。
答案 1 :(得分:1)
我今天在我的Note 2和一个拥有SG3的客户上也犯了这个错误。我做了一些挖掘并发现了以下内容。
如果我请求外部存储设备名称 - Environment.getExternalStorageDirectory()。getName()(我使用它,因为我的目标是版本7) - 我得到'sdcard0',如果我那么添加我的文件名并将其传递给电子邮件或Gmail,然后没有人会添加附件。如果我手动编辑'sdcard0'末尾的零并传递'sdcard'+我的文件名,那么一切正常。 这些似乎都不是JB之前的问题,或者如果我在模拟器中的JB下运行此代码,它总是返回'sdcard'。
我不确定是否有我应该使用的不同代码,或者这是os报告路径和电子邮件系统使用它的方式不一致。 (我曾经以为sdcard0应该指向与sdcard相同的位置 - 但有些东西不起作用)
我可能只是修补我的代码以剥离零(我知道这是丑陋和危险)。除非其他人有任何明智的想法:)
编辑: 我在下面添加了我的代码,以防其他人发现它有用。
// try and grab the log file
String logFile = File.separator + getResources().getString(R.string.app_name) + File.separator + "logs" + File.separator + Constants.SMS_FILE;
String extStorage = Environment.getExternalStorageDirectory().getName();
// The following is a kludge for the Samsung (and maybe more) JB devices that don't allow you to add a file with the SDCARD0 external storage
// link
File nf = new File(extStorage, logFile);
if (!nf.exists()) {
// OK we can't find the file - say so and see if we are hiding behind SDCARD0
Log.w(getLocalClassName() + ".shouldOverrideUrlLoading", "File: " + extStorage + logFile + " Doesn't exist - trying again");
if (extStorage.matches("(?i)SDCARD(?-i)[0-9]")) {
// OK we've got a SDCARDx scenario - let's see if the file exists without the x
String extStorageFix = extStorage.replaceFirst("(?i)SDCARD(?-i)[0-9]", extStorage.substring(0, 6)); // try it without the 0,1,2 etc
nf = new File(extStorageFix, logFile);
if (!nf.exists()) {
// OK we're in the pooh now - can't find the log file so just say so and try to exit without attaching it.
Log.w(getLocalClassName() + ".shouldOverrideUrlLoading", "File: " + extStorageFix + logFile + " Doesn't exist either - giving up");
Toast.makeText(
getApplicationContext(),
"Unable to attach Log file from\n" + extStorage + logFile + "\n" + extStorageFix + logFile
+ "\nPlease add it manually if possible", Toast.LENGTH_LONG).show();
} else {
// Hurrah we found it - remember we did so and carry on
extStorage = extStorageFix;
Log.w(getLocalClassName() + ".shouldOverrideUrlLoading", "Found logfile at: " + extStorage + logFile);
}
}
}
if (Debug.ON) {
Log.d(getLocalClassName() + ".shouldOverrideUrlLoading", "Filepath = " + "file://" + File.separator + extStorage + logFile);
}
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + File.separator + extStorage + logFile));**strong text**