【发布时间】:2017-09-26 19:10:35
【问题描述】:
我在我的应用程序中创建了一个从相机拍照的类。
此类将使用相机拍照并将其存储在具有唯一名称的文件夹中。
但是当我想在onActivityResult方法中获取图片路径时,总是data的Iget null!
这是我的班级相机:
public class Camera{
private Activity activity;
private SystemTools systemTools;
public Camera(Context context) {
this.activity = (Activity) context;
systemTools = new SystemTools();
}
/**
* This Method will take a picture with camera for us
*/
public void takePicture() {
boolean cameraAvailable = systemTools.device_isHardwareFeatureAvailable(activity, PackageManager.FEATURE_CAMERA);
if (cameraAvailable &&
systemTools.system_isIntentAvailable(activity, MediaStore.ACTION_IMAGE_CAPTURE)) {
Intent takePicIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//We prepare the intent to store the taken picture
try {
File outputDir = systemTools.storage_getExternalPublicFolder("ReportsAttachments", true);
File outFile = systemTools.storage_createUniqueFileName("cameraPic", ".jpg", outputDir);
takePicIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outFile));
} catch (Exception e) {
Toast.makeText(activity, "در دریافت تصویر اشکالی رخ داده است ، لطفا دوباره تلاش کنید.", Toast.LENGTH_SHORT).show();
}
activity.startActivityForResult(takePicIntent, App.REQUEST_IMAGE_CAPTURE);
} else {
if (cameraAvailable) {
Toast.makeText(activity, "برنامه ی دوربین دستگاه خراب است.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(activity, "دسترسی به دوربین سیستم امکان پذیر نمی باشد.", Toast.LENGTH_SHORT).show();
}
}
}
}
我在使用相机的 Activity 中设置 onActivityResult() 方法。像这样:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == App.REQUEST_IMAGE_CAPTURE) {
if (resultCode == Activity.RESULT_OK && data != null) {
Log.i("ATTACH", "In Result");
Bitmap bmp = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri selectedImage = getImageUri(this, bmp);
String realPath = getRealPathFromURI(selectedImage);
selectedImage = Uri.parse(realPath);
presenter.onNewAttachmentRequest(selectedImage.getPath());
}
}
} catch (Exception e) {
Log.i("ATTACH", e + " Something went wrong");
}
}
这工作正常,拍摄的照片可在 SD_Card 上使用,但是当我想获取图片路径时,我不能,因为 onActivityResult 中的“数据”一直为空!
这段代码哪里出了问题?
谢谢。
【问题讨论】:
-
确保您有存储权限,即读写权限,如果您的设备是 marshmellow 或更高版本,请添加运行时权限
-
我获得了所有权限。但它不起作用。
标签: android android-camera onactivityresult