安卓:Intent.ACTION_SEND与EXTRA_STREAM上的HTC Hero选择Gmail应用时不附加任何图像
-
18-09-2019 - |
题
在使用默认的邮件应用程序模拟器一切工作正常。但是,当我'接收我已经从使用Gmail应用我的英雄发送邮件我都没有重视。在英雄的默认邮件应用程序工作正常。
我怎样才能让这个代码工作与英雄Gmail应用程序?点击 你可以看到下面的代码。
private void startSendIntent() {
Bitmap bitmap = Bitmap.createBitmap(editableImageView.getWidth(), editableImageView.getHeight(), Bitmap.Config.RGB_565);
editableImageView.draw(new Canvas(bitmap));
File png = getFileStreamPath(getString(R.string.file_name));
FileOutputStream out = null;
try {
out = openFileOutput(getString(R.string.file_name), MODE_WORLD_READABLE);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) out.close();
}
catch (IOException ignore) {}
}
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(png));
emailIntent.setType("image/png");
startActivity(Intent.createChooser(emailIntent, getString(R.string.send_intent_name)));
}
在日志我看到以下内容:
02-05 17:03:37.526: DEBUG/Gmail(11511): URI FOUND:file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg
02-05 17:03:37.535: DEBUG/Gmail(11511): ComposeActivity added to message:0 attachment:|IMAG0001.jpg|image/jpeg|0|image/jpeg|LOCAL_FILE|file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg size:0
02-05 17:03:37.585: INFO/Gmail(11511): >>>>> Attachment uri: file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>> type: image/jpeg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>> name: IMAG0001.jpg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>> size: 0
感谢您的回答。
解决方案
有关我的问题用的下面几行代码解决:
Bitmap screenshot = Bitmap.createBitmap(_rootView.getWidth(), _rootView.getHeight(), Bitmap.Config.RGB_565);
_rootView.draw(new Canvas(screenshot));
String path = Images.Media.insertImage(getContentResolver(), screenshot, "title", null);
Uri screenshotUri = Uri.parse(path);
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
emailIntent.setType("image/png");
startActivity(Intent.createChooser(emailIntent, "Send email using"));
关键的一点是,我节省了屏幕截图到媒体库,然后它可以成功地从那里发送文件。
其他提示
getFileStreamPath()
或openFileOutput()
将创建是不可访问的其他应用(例如Gmail)的私人目录中的文件。使用外部存储器创建公开访问的文件:
private static final int REQUEST_SHARE = 39714;
private File png = null;
private void startSendIntent() {
png = new File(new File(Environment.getExternalStorageDirectory(), "Pictures"), getString(R.string.file_name));
FileOutputStream out = null;
try {
out = new FileOutputStream(png);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) out.close();
}
catch (IOException ignore) {}
}
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(png));
emailIntent.setType("image/png");
startActivityForResult(Intent.createChooser(emailIntent, getString(R.string.send_intent_name)), REQUEST_SHARE);
}
}
当所述外部存储不可用,当其被安装为USB驱动器等这将无法工作。见存储API指南了解有关检测是否外部存储是可用的。
如果您的最低API级是8或更高,则可以使用Context.getExternalCacheDir()
或Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
作为父目录。
除非你最终使用getExternalCacheDir()
,请确保您使用唯一的文件名,以防止用户的文件的一个意外覆盖掉了。
最后,您可以覆盖onActivityResult()
删除文件的共享操作完成后:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_SHARE) {
if(this.png == null) {
return;
}
this.png.delete();
}
}
我有相同的症状。在我的情况,那是因为我最初保存与权限MODE_PRIVATE
附件。当我把它改为MODE_WORLD_READABLE
似乎Gmail有那么能够访问该文件,并正确地发送附件。虽然我在你的代码片断看到你正在使用MODE_WORLD_READABLE
...怪异的。
http://developer.android.com/reference/android/内容/ Context.html#MODE_WORLD_READABLE