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

来源:互联网 发布:金盾软件 编辑:程序博客网 时间:2024/06/16 00:00

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

@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.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预览的影响