android相机意图在某些设备上无法正常工作

时间:2015-06-19 12:02:32

标签: android android-camera oncreate

您好我正在开发Android应用程序,我正在尝试使用设备相机捕获图像并将其保存到特定位置。我尝试了以下方式:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.i("inside on create ", "inside on create ");

    capturePhotoForRecordUpload();
}

public void capturePhotoForRecordUpload() {

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {

        File storageDir = new File(Environment.getExternalStorageDirectory().getPath() + "/MyApp");
        if(!storageDir.exists())
            storageDir.mkdirs();
        if(!storageDir.exists())
            storageDir.mkdir();

            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath() + "/MyApp"+"/sample.jpg")));
            startActivityForResult(takePictureIntent, 7);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
    }

}
}

我在上面的代码中遇到问题。当我开始我的活动时,它正在打开我的相机。但是,当我点击后退按钮时,它再次出现在创建我的活动并再次打开我的相机应用程序。这是正确的行为还是我做错了什么?没有要求销毁我的活动,它再次进入创建。需要一些帮助。谢谢。

2 个答案:

答案 0 :(得分:4)

使用相机时,我在少数设备上遇到了同样的问题。将日志放入您的活动onDestory,并查看在启动摄像头意图时是否调用它。

此问题发生在内存较低的设备上(对我来说,这是一款较旧的LG手机,安装了50多个应用,其中很多都运行了我们用于测试的各种后台服务) - > 相机应用程序内存很重,因此系统会在后台启动它时终止进程。这就是为什么你看到你的活动再次经历整个生命周期。

编辑1:

看看以下答案:

Android: Activity getting Destroyed after calling Camera Intent

Trouble working with the camera in onActivityResult

Activity gets killed after returned from the camera

对于某些人来说,解决方案是通过明显的变化获得的(参见第一个链接)

我实现了处理savedInstanceState包的其他答案中描述的解决方案,因为我已经手动控制了图像路径。

此外,您还会看到重新创建活动的另一个原因,因为某些手机上的某些相机应用会触发方向更改。如果它不是内存问题,它也可能是你的问题。

答案 1 :(得分:1)

在显示启动活动之前启动新活动有点不寻常。

但是,我怀疑如果你以后这样做会更好,也许在onResume()中。

但是,您可能仍会遇到类似的问题。你可能需要跟踪自己是否期望得到一个结果,这样你就不会两次启动相机意图。