您好我正在开发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) {
}
}
}
我在上面的代码中遇到问题。当我开始我的活动时,它正在打开我的相机。但是,当我点击后退按钮时,它再次出现在创建我的活动并再次打开我的相机应用程序。这是正确的行为还是我做错了什么?没有要求销毁我的活动,它再次进入创建。需要一些帮助。谢谢。
答案 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()中。
但是,您可能仍会遇到类似的问题。你可能需要跟踪自己是否期望得到一个结果,这样你就不会两次启动相机意图。