zoukankan      html  css  js  c++  java
  • android开发之——获取相册图片和路径

    Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题。

    比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的

    再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的图片的uri是不一样的,用老的方法导致在Android4.4系统获取不到图片。

        private ImageView imgShow = null;
        private TextView imgPath = null;
        private final int IMAGE_CODE = 0;
        Uri bitmapUri = null;
        private final String IMAGE_TYPE = "image/*";

    imgShow是一个用来显示图片的imageView控件,imgPath是用来显示获取到图片的路径的TextView控件,都要在onCreate()函数里连接到对应的控件Id,IMAGE_CODE是自定义的一个参数,可以为其它数值。

    private void selectImage() {
            // TODO Auto-generated method stub
            boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
            Intent getAlbum;
            if (isKitKatO) {
                getAlbum = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            } else {
                getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
            }
            getAlbum.setType(IMAGE_TYPE);
    
            startActivityForResult(getAlbum, IMAGE_CODE);
    
    
        }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            if (resultCode != RESULT_OK) {
    
                Log.e("TAG->onresult", "ActivityResult resultCode error");
    
                return;
    
            }
            Bitmap bm = null;
            ContentResolver resolver = getContentResolver();
            if (requestCode == IMAGE_CODE) {
                try {
    
                    Uri originalUri = data.getData();        //获得图片的uri
                    bitmapUri = originalUri;
                    isSelectPic = true;
                    bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);
                    //显得到bitmap图片
                    imgShow.setImageBitmap(bm);
                    String[] proj = {MediaStore.Images.Media.DATA};
    
                    Cursor cursor = getContentResolver().query(originalUri, proj, null, null, null);
                    if(cursor.moveToFirst()) {
                        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        String path = cursor.getString(column_index);
                       imgPath.setText(path);
                    }
                    cursor.close();
                } catch (IOException e) {
                    Log.e("TAG-->Error", e.toString());
                }
    
            }
    
        }

    这里用

    getContentResolver().query()替代老的managedQuery(),还在一开始判断编译的sdk版本是否为Android4.4以后的版本
    boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
    是的话就用新的方法,否则用老的方法,在button控件里调用selectImage()函数就能从图片库获取图片。
    要想通过uil得到相应的bitmap图片,可以通过以下方法:
    private Bitmap decodeUriAsBitmap(Uri uri) {
            Bitmap bitmap = null;
            try {
                bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return null;
            }
            return bitmap;
        }
    传入获取到的图片的uri就能得到相应的bitmap图片
  • 相关阅读:
    LoadRunner压力测试心得总结
    Http和Socket连接区别
    转:Socket服务器整体架构概述
    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解 (转载)
    LoadRunner中winsocket协议学习
    Digest Authentication 摘要认证
    Http Digest认证协议
    Http authentication(BASIC, DIGEST)
    redis php 执行命令时,单引号和双引号的区别。
    php 生成下载连接
  • 原文地址:https://www.cnblogs.com/panxiaochun/p/5359249.html
Copyright © 2011-2022 走看看