1

所以我使用 Android Crop 库 ( https://github.com/jdamcd/android-crop ) 允许用户拍照然后裁剪它。

我需要创建两个文件:一个包含来自相机的原始图像,另一个包含裁剪后的图像。为此,我定义了两个文件和两个 URI,然后将它们传递到 Android Crop 库中:

// 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>
4

0 回答 0