7.0 获取拍照和相册图片
在Android开发中,获取用户拍照或从相册选择图片是一项常见的功能。在API 7.0(Android Nougat)及以后的版本中,开发者需要处理一些特定的权限和更新的API来实现这一功能。本知识点主要围绕如何在Android 7.0上获取拍照和相册图片进行详细阐述。 为了访问用户的相机和图库,我们需要在AndroidManifest.xml中声明相应的权限: ```xml <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 从Android 6.0 (Marshmallow)开始,系统引入了运行时权限管理,所以在7.0上也需要在应用运行时请求这些权限: ```java if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); } ``` 获取拍照图片通常涉及启动相机应用,然后处理返回的结果。可以使用`Intent`来启动相机: ```java private static final int REQUEST_IMAGE_CAPTURE = 1; Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } ``` 当用户拍摄完照片后,系统会回调`onActivityResult()`方法,我们可以在该方法中处理新拍摄的照片: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); // 将图片显示在ImageView或其他控件中 } } ``` 获取相册图片则需要使用`Intent`来打开图库应用: ```java private static final int PICK_IMAGE_REQUEST = 2; Intent pickImageIntent = new Intent(Intent.ACTION_PICK); pickImageIntent.setType("image/*"); if (pickImageIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(pickImageIntent, PICK_IMAGE_REQUEST); } ``` 同样,用户选择图片后,我们也会在`onActivityResult()`中接收结果: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK) { if (data.getData() != null) { Uri selectedImage = data.getData(); // 可以使用ContentResolver获取图片的Bitmap,或者使用其他方式处理图片 } } } ``` 注意,从Android Q (10.0)开始,文件访问规则有所改变,需要使用`MediaStore` API和`ContentProvider`来访问外部存储的图片。 在PicSelect-master这样的项目中,可能还包含了对图片选择功能的封装,比如提供一个自定义的图片选择器,支持多选、预览等功能。这类库通常会处理好所有权限请求、图片加载和裁剪等细节,使得开发者可以更方便地集成图片选择功能。 在Android 7.0上获取拍照和相册图片涉及到权限管理、`Intent`启动相机或图库应用、处理返回结果等步骤。随着Android版本的更新,开发者需要关注新的API和权限策略,确保应用兼容不同版本的Android系统。
- 1
- 2
- 3
- 4
- 5
- 6
- 20
- 粉丝: 45
- 资源: 61
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助