打开系统像机功能


方式一:

         /** * 打开系统像机的功能 * @param view */public void startCamera(View view){Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivity(intent);}


这里是通过 调用一个意图开打开的

当我们自己的应用程序在清单文件中添加


            <intent-filter>                <action android:name="android.media.action.IMAGE_CAPTURE" />                <category android:name="android.intent.category.DEFAULT" >                </category>            </intent-filter>


那么当别的应用程序调用这个意图来打开像机的时候,我们的这个应用也会出现在他调用像机的选择框中



获取系统橡机拍摄的照片



首先打开方式为

        /** * 打开系统像机的功能 * @param view */public void startCamera(View view){Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, 1234);}


复写activity的方法 onActivityResult ,获取拍摄照片

        @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent arg2) {super.onActivityResult(requestCode, resultCode, arg2);if (resultCode== RESULT_OK) {if (resultCode == 1234) {Bundle bundle = arg2.getExtras();Bitmap bitmap =  (Bitmap) bundle.get("data");}}}


当然要注意到的是 这里获取到的只是照片的缩略图


打开系统相机,并获取高清照片


这里需要设置一个自定义的存储路径,然后从固定的路径中获取我们所拍摄的照片

拍摄前的设置

                //设置自定义存储路径                mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/systemCemer";                //存储文件夹操作                File outFilePath = new File(mFilePath);                if (!outFilePath.exists()) {                    outFilePath.mkdirs();                }                //设置自定义照片的名字                String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());                mFilePath = mFilePath + "/" + fileName + ".jpg";                File outFile = new File(mFilePath);                Uri uri = Uri.fromFile(outFile);                //拍照                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);                startActivityForResult(intent, 305);

获取照片的操作

在Activity中

protected void onActivityResult(int requestCode, int resultCode, Intent data) {}
if (resultCode==RESULT_OK){            if (requestCode==305){                if (data!=null){                                   }else {                                        if (BuildConfig.DEBUG) Log.d("SystemCemerActivity", mFilePath);                                       final Bitmap bitmap = loadingImageBitmap(mFilePath);                    if (bitmap!=null){                       mImageView.setImageBitmap(bitmap);                    }                }            }        }


这里面依据image 的path来获取了一个bitmap对象,然后将其设置给imageview来显示,使用到的loadingImageBitmap方法是用来加载高清大图的适当缩放功能的方法


 public Bitmap loadingImageBitmap(String imagePath) {        /**         * 获取屏幕的宽与高         */        final int width = getWindowManager().getDefaultDisplay().getWidth();        final int height = getWindowManager().getDefaultDisplay().getHeight();        /**         * 通过设置optios来只加载大图的尺寸         */        BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        Bitmap bitmap = null;        try {            bitmap = BitmapFactory.decodeFile(imagePath, options);            /**             * 计算手机宽高与显示大图的宽高,然后确定缩放有比例             */            int widthRaio = (int) Math.ceil(options.outWidth/(float)width);            int heightRaio = (int) Math.ceil(options.outHeight/(float)height);            if (widthRaio>1&&heightRaio>1){                if (widthRaio>heightRaio){                    options.inSampleSize = widthRaio;                }else {                    options.inSampleSize = heightRaio;                }            }            /**             * 设置加载缩放后的图片             */            options.inJustDecodeBounds = false;            bitmap = BitmapFactory.decodeFile(imagePath, options);        } catch (Exception e) {            e.printStackTrace();        }        return bitmap;    }









更多相关文章

  1. Android第三方授权(新浪微博篇)
  2. android permiss manager (安全软件获取权限 禁用 可用 提示状态)
  3. Android(安卓)Audio系统之RingerMode
  4. Android(安卓)Studio中Run按钮是灰色的快速解决方法
  5. Android在代码中设置控件的drawableLeft等
  6. Android(安卓)横竖屏切换设置的 configChanges 和 screenOrienta
  7. DrawerLayout中侧边栏NavigationView沉浸式状态栏无效问题
  8. 定時線程(Timer)操作UI界面
  9. Android(安卓)MTP模式切换分析

随机推荐

  1. Android智能手机网络防火墙开发的经验心
  2. android v7包 正常导入使用方法
  3. Android(安卓)最火快速开发框架AndroidAn
  4. Android启动脚本init.rc
  5. Android之Kotlin
  6. Android(安卓)ADT 离线下载技巧(告别在线
  7. Android中的Apk的加固(加壳)原理解析和实
  8. # Android文件存储和数据库基本知识
  9. 适用于android的OpenSL ES指南-面向Andro
  10. Android中解析XML