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

nil*_*ash 0 android oncreate android-camera

嗨,我正在开发 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) {
    }

}
}
Run Code Online (Sandbox Code Playgroud)

我在上面的代码中遇到了问题。当我开始我的活动时,它正在打开我的相机。但是当我单击后退按钮时,它再次创建我的活动并再次打开我的相机应用程序。这是正确的行为还是我做错了什么?在不要求破坏我的活动的情况下,它再次进入内部创建。需要一些帮助。谢谢你。

Jan*_*nBo 5

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

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

编辑1:

看看以下答案:

Android:调用相机意图后活动被破坏

在 onActivityResult 中使用相机时遇到问题

从相机返回后活动被杀死


对于某些人,解决方案是通过清单更改获得的(请参阅第一个链接)

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

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