美文网首页
像机的功能

像机的功能

作者: 不识水的鱼 | 来源:发表于2017-04-14 10:44 被阅读15次

    打开系统像机的功能

    android中相机的使用很多,但是有时候我们还是会遇到一些坑,没办法填平,这里记录一下一些有用的东西

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

        /**  
           * @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 ,获取拍摄照片

    @Override  
    rotected 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;  
       }

    相关文章

      网友评论

          本文标题:像机的功能

          本文链接:https://www.haomeiwen.com/subject/wouxottx.html