Android 当我试图从相机拍摄的照片中获取Uri时,我得到空值
这是我的问题,当我试图从相机拍摄的照片中获取Uri时,我在emulator和我的设备上的相机会得到null,但只有在使用另一个相机应用程序时,系统相机才会正常工作。这是我的密码 用于启动照相机应用程序Android 当我试图从相机拍摄的照片中获取Uri时,我得到空值,android,image,camera,save,Android,Image,Camera,Save,这是我的问题,当我试图从相机拍摄的照片中获取Uri时,我在emulator和我的设备上的相机会得到null,但只有在使用另一个相机应用程序时,系统相机才会正常工作。这是我的密码 用于启动照相机应用程序 takePic.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMA
takePic.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String captured_image = System.currentTimeMillis() + ".jpg";
File file = new File(Environment.getExternalStorageDirectory(), captured_image);
captured_image = file.getAbsolutePath();
outputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
intent.putExtra("return-data", true);
startActivityForResult(intent, CAMERA_REQUEST);
}
});
为了得到图像
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST) {
ContentResolver cr = getContentResolver();
InputStream in = null;
try
{
in = cr.openInputStream(outputFileUri);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}
当活动返回时,outputFileUri始终为null。
谢谢。在您进入活动结果之前,Android可能已经停止(并重新启动)您的活动,例如,因为您在拍照时旋转了设备。尝试使用活动状态的其余部分存储和还原
outputFileUri
protected void onSaveInstanceState(Bundle outState)
{
outState.putParcelable("outputFileUri", outputFileUri);
}
我认为这个问题与在标准Android活动生命周期中管理outputFileUri成员变量有关 当您调用StartActivityForResult时,您的活动将停止,并且可能会被破坏。当捕获意图返回时,您的活动将被重新创建并恢复。您可能需要在这些生命周期事件中持久化outputFileUri的值 见和 我唯一能解释的是,为什么本机应用程序会这样做,而不管第三方相机应用程序不这样做,本机应用程序都会消耗资源,以至于您的活动确实被破坏,清除了outputFileUri
除了检查uri/文件路径以查看实际捕获的图像外,还值得查看onActivityResult中返回的结果代码,以确保camera intent表示OK。我敢打赌是的。陷入了同样的境地。你找到解决这个问题的办法了吗?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (savedInstanceState != null)
{
outputFileUri= savedInstanceState.getParcelable("outputFileUri");
}
}