【问题标题】:Unable to receive share image - Android 6.0无法接收共享图像 - Android 6.0
【发布时间】:2016-08-24 04:10:00
【问题描述】:

我正在使用aFileChooser 提供的代码来获取我的应用程序中的共享图像。画廊中的图片可以正常工作,但如果我在 Google Chrome 中使用图片并尝试分享它,它会给我一个 NPE,因为我的 imagePath 为空。

String imagePath = getPath(getActivity(), imageUri);

我的 uri 被识别为 MediaStore(和)从此代码中的一般:

else if ("content".equalsIgnoreCase(uri.getScheme())) {

        if (isGooglePhotosUri(uri))
            return uri.getLastPathSegment();

        return getDataColumn(context, uri, null, null);
    }

但是在getDataColumn() 内部,我的光标转储如下:

08-24 12:00:58.196  13186    13256    ReceivePhotos  D  Cursor is: >>>>> Dumping cursor android.content.ContentResolver$CursorWrapperInner@e110803
08-24 12:00:58.196  13186    13256    ReceivePhotos  D  0 {
08-24 12:00:58.196  13186    13256    ReceivePhotos  D  _data=null
08-24 12:00:58.196  13186    13256    ReceivePhotos  D  }
08-24 12:00:58.196  13186    13256    ReceivePhotos  D  <<<<<
08-24 12:00:58.196  13186    13256    ReceivePhotos  D  Cursor column index is: 0

getDataColumn() 方法:

public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {

    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {
        column
    };

    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,null);
        Log.d("ReceivePhotos", " Cursor is: " + DatabaseUtils.dumpCursorToString(cursor));

        if (cursor != null && cursor.moveToFirst()) {
            final int column_index = cursor.getColumnIndexOrThrow(column);
            Log.d("ReceivePhotos", " Cursor column index is: " + column_index);
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }

    return null;
}

ImageUri 日志

08-24 12:07:32.780  13629    13696    ReceivePhotos  D  Image uri: content://com.android.chrome.FileProvider/images/screenshot/1472011649310784004280.jpg

手机和操作系统详情

Android 6.0.1 上的索尼 E5823

【问题讨论】:

标签: android android-intent android-sharing


【解决方案1】:

您不能也不应该尝试获取与 URI 对应的底层路径 - 在绝大多数情况下,您的应用将永远无法访问路径本身,而只能通过 URI。

幸运的是,您可以直接从 URI 中获取图像的二进制数据:

InputStream in;
Bitmap bitmap = null;
try {
  in = getContentResolver().openInputStream(imageUri);
  // You could do anything with the InputStream.
  // Here we'll just get the Bitmap at full size
  bitmap = BitmapFactory.decodeStream(in);
} catch (IOException e) {
  // Something went wrong
} finally {
  if (in != null) {
    try {
      in.close();
    } catch (IOException ignored) {}
  }
}
// Now you have a Bitmap.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多