首页 > 解决方案 > 如果我的 uri 以“content://com.google.android.apps”开头,我如何从中获取位图

问题描述

我从android设备文件中选择,我得到了以“content://com.google.android.app”开头的uri,由于某种原因我无法将它加载到位图中,

编码

public void insertImage(View view) {
        Intent chooseFile;
        Intent intent;
        chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
        chooseFile.setType("*/*");
        chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
        intent = Intent.createChooser(chooseFile, "Choose a file");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        startActivityForResult(intent, PICKFILE_RESULT_CODE);
}

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case PICKFILE_RESULT_CODE:
                if (resultCode == RESULT_OK) {
                    Uri uri = data.getData();
                    String str = data.getData().toString();
                    String mimeType = getContentResolver().getType(uri);
                    try {
                        // User content resolver to get uri input stream.
                        InputStream inputStream = 
                            getContentResolver().openInputStream(uri);
                        // Get the bitmap.
                        Bitmap imgBitmap = BitmapFactory.decodeStream(inputStream);
                        // Show image bitmap in imageview object.
                        imageView.setImageBitmap(imgBitmap);
                     }catch(FileNotFoundException ex)
                    {
                        Log.e(TAG, ex.getMessage(), ex);
                    }
                }
                break;
             }
    }

有任何想法吗?

标签: androidandroid-bitmap

解决方案


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case PICKFILE_RESULT_CODE:
            if (resultCode == RESULT_OK) {
                Uri uri = data.getData();
                getBitmapFromUri(this, uri);
                imageView.setImageBitmap(imgBitmap);
            }
            break;
    }
}


public static Bitmap getBitmapFromUri(Context context, Uri uri) {
    ParcelFileDescriptor parcelFileDescriptor = null;
    try {
        parcelFileDescriptor =
                context.getContentResolver().openFileDescriptor(uri, "r");
        FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return image;
    } catch (Exception e) {
        Log.e(TAG, "Failed to load image.", e);
        return null;
    } finally {
        try {
            if (parcelFileDescriptor != null) {
                parcelFileDescriptor.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG, "Error closing ParcelFile Descriptor");
        }
    }
}

推荐阅读