所以我正在使用Android裁剪库(https://github.com/jdamcd/android-crop)允许用户拍照然后裁剪。
我需要创建两个文件:一个包含来自摄像头的原始图像,另一个包含裁剪的图像。我这样做是通过定义两个文件和两个URI然后传递到Android裁剪库:
// Camera file.
Calendar calendar = Calendar.getInstance();
cameraCaptureFile = new File(getExternalCacheDir(), "camera-capture-" + calendar.getTime().getTime() + ".tmp");
cameraCaptureUri = FileProvider.getUriForFile(this, getPackageName() + ".provider", cameraCaptureFile);
grantUriPermission(getPackageName(), cameraCaptureUri, FLAG_GRANT_WRITE_URI_PERMISSION & FLAG_GRANT_READ_URI_PERMISSION);
// Cropped file.
croppedFile = new File(getExternalCacheDir(), "cropped.png");
croppedFileUri = FileProvider.getUriForFile(this, getPackageName() + ".provider", croppedFile);
grantUriPermission(getPackageName(), croppedFileUri, FLAG_GRANT_WRITE_URI_PERMISSION & FLAG_GRANT_READ_URI_PERMISSION);
// Start cropping library.
Crop.of(cameraCaptureUri, croppedFileUri)
// Cropping complete lets get our cropped file.
File croppedPng = new File(croppedFileUri.getPath());
问题是croppedPng.exists()总是返回false;但是,当我进入设备存储浏览器并导航到Android / data / com.mycompany / cache时,原始文件和裁剪文件都按预期存在。
我不太确定该怎么做,因为我的应用程序能够创建两个文件但是它无法读取它们?没有意义。
这里完成的是与此问题相关的其他配置:
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />
</paths>
的AndroidManifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.mycompany.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>