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图片
  • 相关阅读:
    超值干货:微服务架构下如何解耦,对于已经紧耦合下如何重构?
    程序员收藏不看系列:近三万字总结Spring注解开发!
    干货收藏:6 款能挣钱的 Spring Boot 开源后台管理系统
    美团二面:你向 Mysql 数据库插入 100w 条数据用了多久?
    5分钟快速掌握阿里内部MySQL性能优化的核心技术!
    优秀!一鼓作气学会“一致性哈希”,就靠这 18 张图了
    分库分表神器 Sharding-JDBC,几千万的数据你不搞一下?
    熬夜肝出5大点,18张图带你彻底弄懂MySQL事务日志
    jdk8新特性Stream
    java多线程
  • 原文地址:https://www.cnblogs.com/panxiaochun/p/5359249.html
Copyright © 2011-2022 走看看