Android 长度=1;尝试从下载文件夹中选择图像时,index=1

Android 长度=1;尝试从下载文件夹中选择图像时,index=1,android,android-intent,Android,Android Intent,我使用 Intent iBildAuswaehlen = new Intent(Intent.ACTION_GET_CONTENT); iBildAuswaehlen.setType("image/*"); startActivityForResult(iBildAuswaehlen, ACTION_PHOTO_WAEHLEN); 我会用计算机处理结果 @Override public void onActivityResult(int requestCode, int resultCode,

我使用

Intent iBildAuswaehlen = new Intent(Intent.ACTION_GET_CONTENT);
iBildAuswaehlen.setType("image/*");
startActivityForResult(iBildAuswaehlen, ACTION_PHOTO_WAEHLEN);
我会用计算机处理结果

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == ACTION_PHOTO_WAEHLEN) {
            if (data == null) {
                f("Fehler");
                return;
            }
            try {
                pfadPhoto = getRealPathFromURI_API19(this, data.getData());
            }
            catch (Exception iae)
            {
                t(getString(R.string.fFehler)+iae.getMessage());
                return;
            }
            i("ACTION_PHOTO_WAEHLEN "+pfadPhoto);
        }
    }
}      
这适用于特定文件夹中的图像。它不适用于“下载”区域(长度=1;索引=1)是错误消息。它适用于正在拍摄的照片


如何使其与下载文件夹和所有其他未受保护且应可读的文件夹一起工作。

为了获得正确的路径,可以使用此方法而不是getRealPathFromURI\u API19:

 public static String getPath(final Context context, final Uri uri) {
    // DocumentProvider
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) {
        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            }

        }
        // DownloadsProvider
        else if (isDownloadsDocument(uri)) {

            final String id = DocumentsContract.getDocumentId(uri);
            final Uri contentUri = ContentUris.withAppendedId(
                    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

            return getDataColumn(context, contentUri, null, null);
        }
        // MediaProvider
        else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }

            final String selection = "_id=?";
            final String[] selectionArgs = new String[]{
                    split[1]
            };

            return getDataColumn(context, contentUri, selection, selectionArgs);
        }
    }
    // MediaStore (and general)
    else if ("content".equalsIgnoreCase(uri.getScheme())) {

        // Return the remote address
        if (isGooglePhotosUri(uri))
            return uri.getLastPathSegment();

        return getDataColumn(context, uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}

始终发布完整的堆栈跟踪。使用
file://
访问内容是不受欢迎的,在安卓N中,甚至不能跨应用程序工作。依赖于
content://
URI。如果我想使用BitmapFactory.decodeFile,如何处理内容?