在Android Fragment中从图库中选择图像

在Android Fragment中从图库中选择图像,第1张

概述我想在片段中选择图库意图.当用户选择选项从图库中选择图像然后图库打开并立即调用片段的onActivityResult.当用户选择图像时,则不调用onActivityResult().所以我无法选择来自画廊的图片. Belo是我打开画廊的代码 – Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.I 我想在片段中选择图库意图.当用户选择选项从图库中选择图像然后图库打开并立即调用片段的onActivityResult.当用户选择图像时,则不调用onActivityResult().所以我无法选择来自画廊的图片.
Belo是我打开画廊的代码 –

Intent intent = new   Intent(Intent.ACTION_PICK,androID.provIDer.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);    intent.setType("vIDeo/,images/");    startActivityForResult(intent,2);

这是我的onActivityResult-

@OverrIDepublic voID onActivityResult(int requestCode,int resultCode,Intent data) {    Log.d(TAG,"onActivityResult"); // not printed    Toast.makeText(mContext,"aaaa"+requestCode,Toast.LENGTH_SHORT).show();}

我的代码中有什么问题.

提前致谢.

解决方法 用这个来打开androID图像选择器:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {    Intent intent = new Intent();    intent.setType("image/*");    intent.setAction(Intent.ACTION_GET_CONTENT);    startActivityForResult(Intent.createChooser(intent,"Select Picture"),galLERY_INTENT_CALLED);} else {    Intent intent = new Intent(Intent.ACTION_OPEN_document);    intent.addcategory(Intent.category_OPENABLE);    intent.setType("image/*");    startActivityForResult(intent,galLERY_KITKAT_INTENT_CALLED);}

对于onActivityResult使用此:

@OverrIDepublic voID onActivityResult(int requestCode,Intent data) {    super.onActivityResult(requestCode,resultCode,data);    Cursor cursor = null;    if (resultCode != Activity.RESulT_OK)        return;    if (data == null)        return;    Uri originalUri = null;    if (requestCode == galLERY_INTENT_CALLED && data != null) {        originalUri = data.getData();        String[] filePathColumn = {MediaStore.Images.Media.DATA};        cursor = getActivity().getContentResolver().query(originalUri,filePathColumn,null,null);        cursor.movetoFirst();        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);        filePath = cursor.getString(columnIndex);        cursor.close();        Log.d("path of uri",filePath);    } else if (requestCode == galLERY_KITKAT_INTENT_CALLED && data != null) {        originalUri = data.getData();        final int takeFlags = data.getFlags()                & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);        // Check for the freshest data.        getActivity().getContentResolver().takePersistableUriPermission(                originalUri,takeFlags);        Log.d("Uri: ",originalUri.toString());        filePath = getPath(getActivity(),originalUri);        Log.d("filepath",filePath);    }}@Suppresslint("NewAPI")public static String getPath(final Context context,final Uri uri) {    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;    // documentProvIDer    if (isKitKat && 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];            }            // Todo handle non-primary volumes        }        // 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);        }        // 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,selection,selectionArgs);        }    }    // MediaStore (and general)    else if ("content".equalsIgnoreCase(uri.getScheme())) {        return getDataColumn(context,uri,null);    }    // file    else if ("file".equalsIgnoreCase(uri.getScheme())) {        return uri.getPath();    }    return null;}/** * Get the value of the data column for this Uri. This is useful for * MediaStore Uris,and other file-based ContentProvIDers. * * @param context       The context. * @param uri           The Uri to query. * @param selection     (Optional) Filter used in the query. * @param selectionArgs (Optional) Selection arguments used in the query. * @return The value of the _data column,which is typically a file path. */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,selectionArgs,null);        if (cursor != null && cursor.movetoFirst()) {            final int column_index = cursor.getColumnIndexOrThrow(column);            return cursor.getString(column_index);        }    } finally {        if (cursor != null)            cursor.close();    }    return null;}/** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvIDer. */public static boolean isExternalStoragedocument(Uri uri) {    return "com.androID.externalstorage.documents".equals(uri.getAuthority());}/** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvIDer. */public static boolean isDownloadsdocument(Uri uri) {    return "com.androID.provIDers.downloads.documents".equals(uri.getAuthority());}/** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvIDer. */public static boolean isMediadocument(Uri uri) {    return "com.androID.provIDers.media.documents".equals(uri.getAuthority());}
总结

以上是内存溢出为你收集整理的在Android Fragment中从图库中选择图像全部内容,希望文章能够帮你解决在Android Fragment中从图库中选择图像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1127698.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存