Android调用相机

隐式Intent调用系统相机


Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

上面的代码就能直接调用系统相机,但是照片无法存储

保存图片的两种方法:

1.缩略图

2.原图


缩略图:

在onActivityResult() 方法中:

Bundle bundle  = data.getExtras();

Bitmap bitmap =  (Bitmap)bundle.get("data");

image.setImageBitmap(bitmap);


原图:

同样在onActivityResult() 方法中:

intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
image_show.setImageBitmap(bitmap);

在onCreate()方法中:

File image = new File(Environment.getExternalStorageDirectory(), "output_image.png");//新建文件,并且命名

imageUri = Uri.fromFile(image);


### 调用相机API实现拍照功能 #### 权限声明 为了能够在应用程序中使用相机,必须在`AndroidManifest.xml`文件中声明必要的权限。对于访问相机硬件而言,需要声明`CAMERA`权限;如果还需要读取或写入外部存储,则需额外声明相应的权限[^3]。 ```xml <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> ``` #### 动态请求权限 自Android 6.0 (API level 23)起,在运行时动态获取用户授予敏感权限变得必要。这意味着即使已经在manifest里定义好了所需权限,也得通过代码向用户申请这些权限才能正常使用相应特性。 ```java if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } ``` #### 创建Intent启动相机应用 当获得了所需的权限之后,就可以构建一个带有特定动作(`IMAGE_CAPTURE`)的Intent对象,并利用startActivityForResult()方法触发默认相机界面让用户完成拍摄操作[^2]。 ```java private static final int REQUEST_IMAGE_CAPTURE = 1; // ... Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // Handle exception when no camera app is available. } ``` #### 处理返回的数据 一旦用户完成了图片捕捉并关闭了相机activity,系统会回调onActivityResult()函数传递回所拍下的照片数据给开发者处理。 ```java @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){ Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); // Do something with the captured photo... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值