我正在尝试制作图片,然后在其他活动中将其作为图片打开,但是我无法做到。 起作用的是:
-打开相机
-拍照并保存图像
然后,当我将路径发送到另一个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>
答案 0 :(得分:0)
您可以尝试做的是将图像作为位图,将其转换为ByteArray,将其按意图传递给下一个活动,然后在第二个活动中将其转换回位图。 (位图是图像文件格式的一种)。
获取位图:
//This should be in your doTakePhotoAction() method.
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 100);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == 100) {
Bitmap bitmap = ImagePicker.getImageFromResult(this, resultCode, data);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
从startActivityForResult获取位图后,您可以执行以下操作:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
//convert to ByteArray
byte[] byteArray = stream.toByteArray();
//Add to intent
Intent intent = new Intent(this, MainActivity2.class);
intent.putExtra("image",byteArray);
startActivity(intent);
第二活动:
byte[] byteArray = getIntent().getByteArrayExtra("image");
//Convert back to Bitmap.
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
现在有了位图,就可以使用它进行任何操作。