(我已经阅读了很多类似的问题,但请耐心等待我)
我需要从一个活动(自定义相机活动)发送图像,其中第二个活动是通过Google API将图像上传到Picasa网络相册。
我发现的每个例子都是这样的:
File f = new File(cacheDir, "image_name.jpg");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
startActivity(intent);
当我使用标准的Android Picasa上传活动(或任何其他共享应用)时,此功能完全正常。我还可以通过我正在使用的the Picasa example应用上传照片,当共享图库/相机等图像时
但我无法弄清楚如何构建一个使用" content:// ---" uri并将其传递给另一个应用程序(对于此示例应用程序或Picasa标准应用程序)...
static class SendData {
String fileName;
Uri uri;
String contentType;
long contentLength;
SendData(Intent intent, ContentResolver contentResolver) {
Bundle extras = intent.getExtras();
if (extras.containsKey(Intent.EXTRA_STREAM)) {
Uri uri = this.uri = (Uri) extras.get(Intent.EXTRA_STREAM);
String scheme = uri.getScheme();
if (scheme.equals("content")) {
Cursor cursor = contentResolver.query(uri, null, null, null, null);
cursor.moveToFirst();
this.fileName = cursor.getString(cursor.getColumnIndexOrThrow(Images.Media.DISPLAY_NAME));
this.contentType = intent.getType();
this.contentLength = cursor.getLong(cursor.getColumnIndexOrThrow(Images.Media.SIZE));
}
}
}
}
硬编码内容uri有效。 E.g:
uploadIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://media/external/images/media/11"));
答案 0 :(得分:1)
与媒体文件相关的信息由MediaStore
存储,这是一个ContentProvider(http://developer.android.com/reference/android/provider/MediaStore.Images.html)
MediaStore.Images.DATA列对应于文件路径,MediaStore.Images._ID列对应于ID。
您需要查询与您的文件路径对应的ID,然后从中创建一个ContentUri(如果图像在外部存储上,将是MediaStore.Images.Media.EXTERNAL_CONTENT_URI + id,我会尝试想一个将ID转换为内容Uri的更好方法。