您的位置:首页 > 移动开发 > Android开发

android按home键再启动程序camera黑屏&屏蔽home键

2017-07-05 18:49 906 查看
   更新:现在找到解决按home键再启动程序camera黑屏的方法了:需要将SurfaceView加载到FrameLayout中的代码写在onResume中

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (camera == null){
camera = getCameraInstance();
}
//必须放在onResume中,不然会出现Home键之后,再回到该APP,黑屏
mySurfaceView = new MySurfaceView(getApplicationContext(), camera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mySurfaceView);
}https://www.2cto.com/kf/201408/329957.html

 MainActivity有一个按钮,点按钮进入到CameraActivity,CameraActivity里有一个Camera的预览,调用的系统相机。CameraActivity类implements了SurfaceHolder.Callback, Camera.PreviewCallback。现在的问题是在CameraActivity界面Camera正常预览时,点击手机home键后再点应用图标进入应用,Camera就黑屏了。点手机返回键返回MainActivity再进入CameraActivity时Camera预览就正常了。

开启camera预览的方法:

private void preview() throws IOException {
if (hasFrontFacingCamera()) {//如果有前置摄像头
camera = Camera.open(1);
camera.setDisplayOrientation(90);
} else {
camera = Camera.open(0);
camera.setDisplayOrientation(270);
}
Camera.Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
Camera.Size selected = sizes.get(1);
width = selected.width;
height = selected.height;

params.setPreviewSize(640, 480);
//        params.setPictureFormat(PixelFormat.RGB_565);
//        params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
//        params.setPreviewSize(width, height);
camera.setParameters(params);
camera.setPreviewDisplay(holder);
camera.startPreview();
}


        这个问题貌似是因为按home键后Activity中的camera被release掉了,然后再点应用图标进入应用,camera没有启动。启动camera的方法preview()是写在了onCreate方法里。

刚开始想的是处理Activity的生命周期的方法,onPause时释放Camera,onRestart或onResume时调用preview()重新启动Camera。但是报错“app passed NULL surface”。查找了资料,看到这个博客Android调用相机预览黑屏app
passed NULL surface解决,试了里面的方法,不起作用,报错。没能解决。放弃。

后来又试了在CameraActivity中屏蔽home键,这样就不能退回桌面了。自己写了onKeyDown方法屏蔽home键,发现不起作用。然后就上网搜屏蔽home键的方法,发现网上说的方法都无效,包括所谓的4.0以后能用的方法,包括GitHub上别人提供的第三方工具。据说谷歌为了安全,把屏蔽home键的方法写在了framework层而不再是application层,除非修改framework层的代码,否则屏蔽不了home键。搜了很多资料,发现这个有一点道理:Android
开发锁屏屏蔽Home键、原生锁屏界面,但是没源码,这个功能对我来说又不是必须的,就没好好搞。

再后来,想了个偷懒的办法。因为在我们这个APP中,CameraActivity界面中按home键基本是不会有的操作,属于非正常操作,所以我就想如果按了home键,那就把当前页销毁,返回上一页面,重新进入CameraActivity。于是在当前页失去焦点时finnish掉当前页。

@Override
protected void onPause() {
super.onPause();
finish();
}

经测试,可以使用。

类似博客:Android 休眠状态对Camera预览的影响

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: