Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当控件从摄影机子活动返回时,主活动被覆盖_Android_Android Intent_Android Activity_Android Camera - Fatal编程技术网

Android 当控件从摄影机子活动返回时,主活动被覆盖

Android 当控件从摄影机子活动返回时,主活动被覆盖,android,android-intent,android-activity,android-camera,Android,Android Intent,Android Activity,Android Camera,在这段代码中,在cam\u get\u photo()方法中,我调用startActivityforResult(),并且在调用startActivityforResult()之前将fileUri存储为全局变量。当执行从CameraActivity返回到MainActivity时,我发现原来的MainActivity丢失,新的MainActivity被创建,因为fileUri的值变为空。因此,当我在activityResult()函数中检查fileUri的值时,我发现它为空 这是一个特殊的问题,

在这段代码中,在
cam\u get\u photo()
方法中,我调用
startActivityforResult()
,并且在调用
startActivityforResult()
之前将fileUri存储为全局变量。当执行从CameraActivity返回到MainActivity时,我发现原来的MainActivity丢失,新的MainActivity被创建,因为fileUri的值变为空。因此,当我在activityResult()函数中检查fileUri的值时,我发现它为空

这是一个特殊的问题,因为我需要访问
fileUri
,它以前作为全局存储在原始主活动中。但是当控件从摄影机子活动返回并且
fileUri
丢失时,
main活动
将被覆盖


请提出一些解决办法或方法来克服这个问题。如果需要澄清,请告诉我

我在这个链接的答案中找到了问题的解决方案。它通过在清单中锁定屏幕方向来解决

锁定调用活动的屏幕方向为我解决了这个问题。如果您不想锁定自己的活动,您可以创建一个方向锁定的活动,仅用于调用摄影机,然后将结果返回到“真实”活动

要锁定屏幕方向,请将其放入清单中的活动定义(两行):

android:screenOrientation=“肖像” android:configChanges=“键盘隐藏|方向|屏幕大小”


“纵向”也可以是“横向”

PS:-我还观察到,在相机活动恢复后,我的手机屏幕会旋转。我怀疑由于屏幕旋转,正在创建一个新的主活动,而原来的主活动丢失了。但我不确定。
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();
        }
    }
}