【发布时间】:2017-08-21 20:23:30
【问题描述】:
我想从片段中拍照,但如果我使用跟随代码 onActivityResult Intent 数据 return null。我不明白为什么 Intent 数据返回 null?
CameraFragement.java
private void takePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException e) {
e.printStackTrace();
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(getContext(),
"com.example.android.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
String imagePath;
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
imagePath = image.getAbsolutePath();
return image;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // this Intent data return null
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
Intent intent = new Intent(getActivity(), PostActivity.class);
intent.setData(data.getData());
startActivity(intent);
}
}
如果我使用下面的代码而不是上面的 takePictureIntent Intent 数据返回附加值,但 data.getData() 返回 null。我不想返回带有额外内容的数据。我不想位图数据。我需要数据 Uri 表单。我需要 data.getData()。此后续代码以前使用过,但现在不起作用。我总是使用 Android SDK 更新我的应用程序。我认为这是原因,但解决方案是什么?
private void takePictureIntent() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}
编辑:我几乎尝试了所有方法,但 Intent 数据仍然返回 null。我现在正在使用第一个代码示例的后续代码。你可以用这个,很好用。如果您有 Intent 数据的解决方案,请不要忘记通知我。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
File file = new File(imagePath);
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(getActivity(), PostActivity.class);
intent.setData(uri);
startActivity(intent);
}
【问题讨论】:
-
请详细说明,为什么要在这个问题中(故意)添加
firebase标签?因为我在那里看不到它的任何用法
标签: android android-fragments firebase android-camera