如何在Android中使用内容uri(_not_文件uri)传递单个带有Intent的图像



(我读过很多类似的问题,但请耐心等待(

我需要从一个活动(自定义相机活动(发送图像,其中第二个活动是通过谷歌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上传活动(或任何其他共享应用程序(时,这非常有效。我还可以通过我正在使用的 Picasa 示例应用程序上传照片,当从画廊/相机等共享图像时。

但是我无法弄清楚如何构建使用"content://---"uri 的 Intent 并将其传递给另一个应用程序(无论是此示例应用程序还是 Picasa 标准应用程序(......

具体来说:如何创建与以下代码兼容的意图(即使用"content://"uri 而不是"file://"uri(?

  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中检索文件信息会导致NullPointerException,并在应用程序中使用Google Http请求。

对内容 uri 进行硬编码有效。例如:

 uploadIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://media/external/images/media/11"));

与媒体文件相关的信息由MediaStore存储,这是一个内容提供程序(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(。

http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html#query(android.content.ContentResolver, android.net.Uri, java.lang.String[]

相关内容

  • 没有找到相关文章

最新更新