来源:小编 更新:2025-01-23 00:00:21
用手机看
你有没有想过,手机里的相机功能竟然这么神奇?一按按钮,就能捕捉到生活中的美好瞬间。今天,就让我带你一起探索如何轻松调用安卓系统的相机,让你的手机拍照技能大升级!
在安卓6.0(API级别23)及以上版本,为了保护用户的隐私,系统要求应用在运行时请求权限。所以,第一步就是向用户申请相机权限。在Manifest.xml文件中,你需要声明以下权限:
```xml
在代码中,使用以下方法请求权限:
```java
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.CAMERA)) {
// Show an expanation to the user asynchronously -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
这里,`MY_PERMISSIONS_REQUEST_CAMERA` 是一个自定义的请求码,用于在onRequestPermissionsResult()方法中区分不同的结果来源。
有了相机权限,接下来就是启动相机了。安卓系统提供了通过Intent启动相机应用的方法。创建一个Intent,设置其动作为ACTIONIMAGECAPTURE,然后通过startActivityForResult()启动,以便在拍摄完成后返回结果。
```java
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUESTIMAGECAPTURE);
这里的`REQUESTIMAGECAPTURE` 是一个自定义的请求码,用于在onActivityResult()中区分不同的结果来源。
默认情况下,相机应用会将照片保存到设备的公共图片库。但有时候,你可能希望将照片保存到指定的目录下。以下是如何实现这一功能的步骤:
1. 创建一个File对象,指定保存路径和文件名。
```java
File photoFile = new File(Environment.getExternalStorageDirectory(), \MyPhoto.jpg\);
2. 使用Uri.fromFile()方法将File对象转换为Uri对象。
```java
Uri photoURI = Uri.fromFile(photoFile);
3. 将Uri对象设置到Intent中。
```java
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
4. 启动相机。
```java
startActivityForResult(takePictureIntent, REQUESTIMAGECAPTURE);
这样,拍摄完成后,照片就会自动保存到指定的目录下。
四、适配7.0及以上版本:避免FileUriExposedException异常
从Android 7.0开始,系统禁止应用向外部公开file://URI。因此,在7.0及以上版本中,直接使用Uri.fromFile()方法会抛出FileUriExposedException异常。为了避免这个问题,你可以使用以下方法:
1. 在AndroidManifest.xml文件中声明FileProvider。
```xml
android:name=\androidx.core.content.FileProvider\ android:authorities=\你的包名.fileprovider\ android:exported=\false\ android:grantUriPermissions=\true\> android:name=\android.support.FILE_PROVIDER_PATHS\ android:resource=\@xml/file_paths\ />
2. 在res/xml目录下创建file_paths.xml文件,指定文件保存路径。
```xml
3. 使用FileProvider.getUriForFile()方法获取Uri对象。
```java
Uri photoURI = FileProvider.getUriForFile(this, \你的包名.fileprovider\, photoFile);
4. 将Uri对象设置到Intent中。
```java
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
5. 添加以下代码,使Intent能够处理FileProvider。
```java
Intent takePictureIntent = Intent.createChooser(takePictureIntent, \Take Picture\);
takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
这样,即使在7.0及以上版本中,也能正常保存照片。
五、:轻松调用安卓系统相机,让你的手机拍照更强大
通过以上步骤,你就可以轻松调用安卓系统的相机,实现拍照、保存照片等功能。当然,这只是冰山一角,还有更多高级功能等待你去探索。快来试试吧,让你的手机拍照技能大升级!