【发布时间】:2018-11-05 00:31:58
【问题描述】:
我正在尝试制作一张图片,然后在其他活动中将其作为图片打开,但我无法做到。 有效的是:
-打开相机
-拍照并保存图片
然后,当我将路径发送到另一个 Activity 时,表示该路径上没有任何内容。
我正在使用provider,否则它将无法工作...
这是我在 manifest.xml 中的提供者
<provider
android:name="android.support.v4.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"
tools:replace="android:resource"/>
</provider>
然后我用这个拍照:
private void doTakePhotoAction() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mImageCaptureUri = FileProvider.getUriForFile(TakePictureAndCropActivity.this, BuildConfig.APPLICATION_ID+".provider", new File(Environment.getExternalStorageDirectory(),
"tmp_contact_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
try {
intent.putExtra("return-data", false);
startActivityForResult(intent, PICK_FROM_CAMERA);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
然后我将其发送到我的其他活动
Intent intent = new Intent(this, CropImage.class);
intent.putExtra("image-path", mImageCaptureUri.getPath());
intent.putExtra("scale", true);
startActivity(intent);
它正在返回“”那些方法
mImagePath = extras.getString("image-path");
mSaveUri = getImageUri(mImagePath);
if( extras.getString( MediaStore.EXTRA_OUTPUT ) != null ) mSaveUri = getImageUri( extras.getString( MediaStore.EXTRA_OUTPUT ) );
mBitmap = getBitmap(mImagePath);
getImageUri 很简单:return Uri.fromFile(new File(path)); 这将返回“file:///external/tmp_contact_1541377710472.jpg”
然后我得到了这个:
java.io.FileNotFoundException: /external/tmp_contact_1541377710472.jpg(没有这样的文件或目录)
顺便说一下provider_paths 包含这个:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
<external-files-path
name="external_files"
path="." />
<cache-path
name="cache"
path="." />
<external-cache-path
name="external_cache"
path="." />
<files-path
name="files"
path="." />
</paths>
【问题讨论】:
标签: java android android-contentprovider