2 zp19910219 zp19910219 于 2016.04.04 22:58 提问

安卓调用系统相册查找图片现在在一些机型上已经不适用了 10C

如题,今天在一台三星手机上使用传统的调用方法是可以的,但是换了一台小米的手机后发现同样的代码在相册里面选到图片了但是却不能发送到activity里,很困惑啊,一些吧有让我自己去写,说一些厂商已经改了一些东西,可是我不知道该怎么去写,求大神帮忙啊,如果不适用系统调用方法,该如何做呢

3个回答

luochoudan
luochoudan   Ds   Rxr 2016.04.04 23:10

不会写就参考参考人家的。
https://github.com/LinJZong/LocalAlbum

qq_23018915
qq_23018915   2016.04.04 23:21

应该是说从系统图库里选图的问题吧,在kitkat以上的版本图库的调用发生了一些改变。。通过url获得路径的方法也同样有改变
4.3及以下还可以用原来的
4.4及以上可以用如下方法通过url获得路径

public static String getPath(final Context context, final Uri uri)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // DocumentProvider
            if (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;
    }
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.04.05 09:20

Android系统activity被国内厂商篡改太多了,建议自己重写

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!