美文网首页
简单Android 拍照

简单Android 拍照

作者: 拙峰朽木 | 来源:发表于2017-07-31 17:28 被阅读13次

    不管其他的,先添加权限:

        <uses-feature android:name="android.hardware.Camera" 
            android:required="true"
    
    • 调用手机自带的摄像机应用来获取相片
    int REQUEST_IMAGE_CAPTURE = 1;
    
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
    
    
    • 获取缩略图
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                Bundle extras = data.getExtras();
                Bitmap bitmap = (Bitmap) extras.get("data");
                mImageView.setImageBitmap(bitmap);
    
            }
        }
    

    Android的相机应用会把拍好的照片编码为缩小的Bitmap,使用extra value的方式添加到返回的Intent当中,并传送给onActivityResult(),对应的Key为"data"。

    • 获取全尺寸图片
      如果我们提供了一个File对象给Android的相机程序,它会保存这张全尺寸照片到给定的路径下。另外,我们必须提供存储图片所需要的含有后缀名形式的文件名。
      首先的开启读写权限:
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    

    一般而言,用户使用设备相机所拍摄的任何照片都应该被存放在设备的公共外部存储中,这样它们就能被所有的应用访问。将DIRECTORY_PICTURES作为参数,传递给getExternalStoragePublicDirectory()方法,可以返回适用于存储公共图片的目录。
    /storage/emulated/0/Pictures

      File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    

    如果希望照片对我们的应用而言是私有的,那么可以使用getExternalFilesDir()提供的目录。

            File storageDir  = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    
    

    /storage/emulated/0/Android/data/com.example.frc.trainingapp/files/Pictures
    所有存储在getExternalFilesDir()提供的目录中的文件会在用户卸载你的app后被删除。

    需要注意的是如果将图片保存到文件中,那么onActivityResult返回的data就为Null了

    • 将照片添加到相册中
      1、保存Bitmap到本地指定路径下
      2、通过广播,通知系统相册图库刷新数据
                Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                File f = new File(mCurrentPhotoPath);
                Uri contentUri = Uri.fromFile(f);
                mediaScanIntent.setData(contentUri);
                this.sendBroadcast(mediaScanIntent);
    

    相关文章

      网友评论

          本文标题:简单Android 拍照

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