android studio 调用系统相机后,如何将照片保存到指定路径并获取照片uri
时间: 2023-09-10 07:07:29 浏览: 74
在Android中调用系统相机拍照后,可以通过以下步骤将照片保存到指定路径并获取照片uri:
1. 在AndroidManifest.xml中添加文件读写权限和相机权限:
```xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. 创建一个File对象用于保存照片:
```java
String folderName = "myFolder";
File folder = new File(Environment.getExternalStorageDirectory(), folderName);
if (!folder.exists()) {
folder.mkdirs();
}
String fileName = "myPhoto.jpg";
File file = new File(folder, fileName);
```
3. 启动系统相机,并将照片保存到指定路径:
```java
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
Uri photoUri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", file);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
```
其中,FileProvider是Android 7.0及以上版本中用于提供文件访问权限的工具类,需要在AndroidManifest.xml中进行配置。
4. 在onActivityResult方法中获取照片uri:
```java
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Uri photoUri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", file);
// do something with photoUri
}
```
注意,需要在AndroidManifest.xml中注册FileProvider,并在provider标签中设置authorities属性为getApplicationContext().getPackageName() + ".provider",如下所示:
```xml
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
...
</application>
```
其中,provider_paths.xml文件可以自定义,用于指定要共享的文件或文件夹路径,如下所示:
```xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myFolder" path="myFolder/" />
</paths>
```
以上是将照片保存到指定路径并获取照片uri的步骤。