我是Android的新手,现在开始关注谷歌的培训课程,我遇到了一个问题。执行Bundle extra = data.getExtras()
后,extra为null。在我添加代码"if(extra!=null)"
之前,它会抛出nullpointerexception
这是onActivityResult()方法的代码
以下是启动相机并在本地保存照片的代码部分
我的所有代码都遵循培训课程,我很困惑哪里出错了。 有人能帮助我吗?
答案 0 :(得分:0)
请更新您的photo_intent.putExtra(MediaStore.EXTRA_OUTPUT, <<uri>>)
,捕获照片的结果不会响应图片。它返回您在<<uri>>
中传递的Uri。因此,请将onActivityResult()
声明为全局,然后您可以在{{1}}
答案 1 :(得分:0)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
hasWriteContactsPermission = checkSelfPermission(Manifest.permission.CAMERA);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA},
REQUEST_CODE_ASK_PERMISSIONS);
return;
}
} else {
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
File photo = new File(Environment
.getExternalStorageDirectory(),
"Journal" + Utils_class.getID() + ".jpeg");
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photo));
mSelectedFilePath = photo.getAbsolutePath();
startActivityForResult(intent,
ACTION_TAKE_PICTURE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
try {
if (resultCode == RESULT_OK) {
if (requestCode == ACTION_TAKE_PICTURE) {
// flag = true;
// new Utils();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
checkPermissionForStorageForCam();
} else {
Uri selectedImageUri = data.getData();
}
}
}
} catch (Exception e) {
}
}
答案 2 :(得分:0)
如果您使用相机意图传递额外参数MediaStore.EXTRA_OUTPUT
,则相机活动会将捕获的图像写入该路径,并且不会在onActivityResult方法中返回位图。
如果您要检查通过的路径,那么您将知道实际上相机已在该路径中写入捕获的文件。