private File getOutputPhotoFile() {
File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), getPackageName());
if (!directory.exists())
{
if (!directory.mkdirs())
{
responsetxt.setText("Failed to create directory");
Log.e(TAG, "Failed to create storage directory.");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.UK).format(new Date());
//responsetxt.setText(directory.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
return new File(directory.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
}
public void cam_get_photo()
{
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = Uri.fromFile(getOutputPhotoFile());
responsetxt.setText(fileUri.toString());
i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQ);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQ)
{
if (resultCode == RESULT_OK)
{
Uri photoUri;
if(data == null)
{
//Toast.makeText(this, "data null", Toast.LENGTH_LONG).show();
photoUri = fileUri;
if(photoUri == null) Toast.makeText(this, "data null", Toast.LENGTH_LONG).show();
else
{
File myfile = new File(photoUri.toString());
responsetxt.setText(photoUri.toString());
}
//String outpath = myfile.getAbsolutePath();
//Toast.makeText(this, outpath, Toast.LENGTH_LONG).show();
}
else
{
Bitmap photo = (Bitmap) data.getExtras().get("data");
if(photo != null)
Toast.makeText(this, "Image saved successfully in: \n" + data.getData(), Toast.LENGTH_LONG).show();
ImageView photoImage1 = (ImageView) findViewById(R.id.photo_image);
photoImage1.setImageBitmap(photo);
}
}
else if (resultCode == RESULT_CANCELED)
{
Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Callout for image capture failed!", Toast.LENGTH_LONG).show();
}
}
}
控制返回此代码,在cam_get_photo()
方法,我打电话startActivityforResult()
,也是我存储了fileURI为全局变量调用startActivityforResult()
前覆盖。当从CameraActivity执行返回到MainActivity,我观察,原来MainActivity丢失,并创造了新的MainActivity,因为它的了fileURI的价值已变得无效。所以当我检查onActivityResult()
函数中的fileUri的值时,我发现它为空。主要活动时,从摄像机子活动
这是一个特殊的问题,因为我需要访问fileUri
这是在存储之前全球在原来的主要活动。但当控制权从Camera子活动返回并且fileUri
丢失时,MainActivity
会被覆盖。
请提出一些解决方法或方法来解决此问题。如果需要澄清,请告诉我。
PS: - 我还观察到,相机返回的活动中有我的手机屏幕旋转之后。我怀疑由于屏幕旋转,新的主要活动正在创建,原来的主要活动丢失。但我不确定。 –