拍照或本地媒体库获取图片

来源:互联网 发布:美国农业部数据网站 编辑:程序博客网 时间:2024/05/01 12:42

本地媒体库或者拍照 都是调用系统本身的功能,

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
所以直接startActivityForResult就能浏览媒体库或者拍照,然后就是要获得返回的数据,直接调用onActivityResult即可,这只是基本的思路,实际操作并不是这么简单。

首先是启动媒体库部分

    private void getPictureFormLocal()    {        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        //用来表明intent只能被openFileDescriptor(Uri, String)打开         intent.addCategory(Intent.CATEGORY_OPENABLE);        //intent.setType(“audio/*”); //选择音频        //intent.setType(“video/*”); //选择视频        //intent.setType(“video/*;image/*”);//同时选择视频和图片        intent.setType("image/*");        startActivityForResult(Intent.createChooser(intent, "选择图片来源"),            GET_PHOTO_FROM_LOCAL);    }
然后是启动照相机拍照

    private void getPictureFromCamera()    {        //检查SDCard是否存在        String status = Environment.getExternalStorageState();        if (status.equals(Environment.MEDIA_MOUNTED))        {            try            {                File dir = new File(photopath);                if (!dir.exists())                    dir.mkdirs();                Intent intent = new Intent(                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);                path = photopath + getPhotoFileName();                File f = new File(path);                Uri u = Uri.fromFile(f);                intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);                intent.putExtra(MediaStore.EXTRA_OUTPUT, u);                startActivityForResult(intent, GET_PHOTO_FROM_CAMERA);            }            catch (ActivityNotFoundException e)            {                Toast.makeText(MainActivity.this, "没有找到储存目录", Toast.LENGTH_LONG).show();            }        }        else        {            Toast.makeText(MainActivity.this, "没有储存卡", Toast.LENGTH_LONG).show();        }    }

最后是在onActivityResult中得到bitmap

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data)    {        Log.i(TAG, "in onActivityResult");        if (resultCode == RESULT_OK)        {            Bitmap bp = null;            switch (requestCode)            {                case GET_PHOTO_FROM_CAMERA :                    bp = BitmapFactory.decodeFile(path);                    break;                case GET_PHOTO_FROM_LOCAL :                    Uri uri = data.getData();                    Log.i(TAG, "uri == " + uri);                    try                    {                        bp = BitmapFactory.decodeStream(resolver.openInputStream(uri));                    }                    catch (FileNotFoundException e)                    {                        e.printStackTrace();                    }                    Log.i(TAG, "bp == " + bp.toString());                    break;            }            imageView.setImageBitmap(bp);        }        super.onActivityResult(requestCode, resultCode, data);    }
大概思路就是这个样子

代码地址




0 0
原创粉丝点击