我正在尝试使用相机捕获后在图像视图上将图像设置为个人资料图片。图像捕获工作正常,图像存储在设备存储器中。但onActivityResult代码意图对象变为空。
以下是调用相机操作的代码
extension Calendar {
func isDateInNextThirtyDays(_ date : Date) -> Bool {
return self.dateComponents([.month], from: Date(), to:date).month! < 1
}
}
从拨号和活动中调用
Intent camera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri file = Uri.fromFile(Utilities.getOutputMediaFile());
camera.putExtra(MediaStore.EXTRA_OUTPUT, file);
activity.startActivityForResult(camera, Constants.IMAGE_CAPTURE_CAMERA);
片段
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Constants.LOGIN_REQUEST) {
if (AppSettings.getInstance(HomeScreen.this).getBooleanValue(AppKeys.LOGIN_STATUS)) {changeFragment(new Fragment_Account());
}
} else {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameContainer);
fragment.onActivityResult(requestCode, resultCode, data);
}
}
活动中的和片段 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
if (requestCode == Constants.IMAGE_CAPTURE_CAMERA && resultCode == Activity.RESULT_OK) {
ProfilePicUri = (Uri) data.getExtras().get(MediaStore.EXTRA_OUTPUT);
Log.d("ImageUri", "onActivityResult: " + ProfilePicUri);
performCrop();
} else if (requestCode == Constants.IMAGE_CAPTURE_GALLERY) {
if (data.getData() != null) {
ProfilePicUri = data.getData();
performCrop();
}
} else if (requestCode == Constants.IMAGE_CROP) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap newProfilePic = extras.getParcelable("data");
if (newProfilePic != null) {
customer.setProfilePic(Utilities.encodeTobase64(newProfilePic));
profilePic.setImageBitmap(newProfilePic);
Bitmap image = ((BitmapDrawable) profilePic.getDrawable()).getBitmap();
String imageUrls = Utilities.encodeTobase64(image);
String imageString = image.toString();
Log.d("imageUrl : ", imageUrls);
}
}
}
}
}
为空。
答案 0 :(得分:3)
但onActivityResult代码意图对象变为空。
应该是null
。您知道图像应该位于何处:它是您在EXTRA_OUTPUT
中指定的位置。在那里寻找图像。
另请注意,一旦Uri.fromFile()
攀升至24或更高,targetSdkVersion
将无法在Android 7.0及更高版本上运行。请切换为使用FileProvider
及其getUriForFile()
方法。来自This sample app的this book说明了如何执行此操作。
答案 1 :(得分:1)
删除您设置保存文件路径的行,除非您 需要设置自定义路径以保存文件。
一旦URI由
设置Intent.putExtra(MediaStore.EXTRA_OUTPUT, file);
结果意图将为null,它的设计就是这样。
onActivityResult,
intent.getData()
将为您提供捕获图像的URI。