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图片
时间: 2024-08-11 05:45:15

android开发之——获取相册图片和路径的相关文章

Android开发:获得相册图片、拍照、照片上传服务器、从服务器读取照片

文章目录 一 整体功能描述 二 功能实现 1 获得图片 2上传到服务器并保存 3从服务器中获得图片并显示 4Common类中的辅助工具 一. 整体功能描述 通过从相册中选择图片或者拍照的方式获得图片,然后将这个图片上传至服务器,同时实现从服务器上读取该图片. 二. 功能实现 1.1 获得图片 (1)通常情况下,有以下两种方式: 从相册中选择图片 这种方式原理比较简单,就是从SDK中获得照片,转成字节再生产Bitmap对象用于显示即可. 拍照获得图片 拍照获取的图片原理就是先拍照存储,然后再读取,

Android开发之获取相册照片和获取拍照照片

在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: 一般就是写出这个方法 protected void getImageFromAlbum() { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*");//相片类型 startActivityFo

Android开发之从相册选择照片

Android开发之从相册选择照片 请尊重他人的劳动成果,转载请注明出处:Android开发之从相册选择照片 我曾在 <Android开发之裁剪照片>一文中介绍过,如何从相册选取照片和拍摄照片并进行裁切,在本篇中主要向介绍从相册选择原生照片(不裁切). 第一步:向系统发送选择照片的意图. /** * 从相册选择原生的照片(不裁切) */ private void selectFromGallery() { // TODO Auto-generatedmethod stub Intentinte

Swift中获取相册图片与保存到相册

关于这个网上目前位置记录的资料比较少,记录一下这个坑 获取相册图片 1: var iPC = UIImagePickerController() 2: iPC.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum 3: iPC.delegate = self 4: presentViewController(iPC, animated: true) { () -> Void in 5: print("complete

Android开发之获取系统12/24小时制的时间

//通过DateFormat获取系统的时间 String currentTime=DateFormat.format("yyyy-MM-dd hh-mm-ss", new Date()).toString(); currentTime="通过DateFormat获取的时间:\n"+currentTime; //通过SimpleDateFormat获取24小时制时间 SimpleDateFormat sdf=new SimpleDateFormat("yyy

Android 开发中下载的图片 图库中看不到

Android 开发中下载的图片,但是代开图库的时候,不能马上看到图片.是因为android 内部有一个 扫描机制, 你下载之后图片已经存在了,但是没有被扫描到.所以你马上打开图库 看不到 下载的图片: 需啊哟加入下面的 代码 下载完成的hanlder 中处理: 直接调用就可以 MediaScannerConnection.scanFile( ShowBigImage.this, new String[] {url}, null, null);

Android开发之获取布局填充器

Android开发之获取布局填充器的三种方式 第一种 : LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.item_listview, null); // 第一个参数写你需要加载的布局文件 第二种 : LayoutInflater inflater = LayoutInflater.from(Mai

ALAssetsLibrary获取相册图片

最近做了一下获取iPhone相册图片的事,看了一些ALAssetsLibrary相关的文章,受了些启发.不过对于其中的一些文章,我们大可善意地去相信作者还是想帮助我们的. ALAssetsLibrary是一个很有用的家伙,因为它能取各种资源,图片.视频,等等.笔者也是初学者,不敢大放厥词,这里把我实现的代码贴出来,请大家指点.只是取图片. 先创建了一个类,只有一个属性:NSMutableArray *photos; 用来存放取到的图片.然后就可以在.m文件中写下面这个方法. 中间的注释部分,是可

Android开发资源获取国内代理(转载)

Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具.学习开发教程.用到设计素材,欢迎Star.Fork ??. 如果你对翻译英文的Android开发技术文章感兴趣,欢迎Start和ForkAndroidWeekly中国文章翻译项目 Android Tools A