简单Android 拍照

2017-07-31  本文已影响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"。

    <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了

            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);
上一篇下一篇

猜你喜欢

热点阅读