Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android---護眼燈和兼容性高的手電筒實現

android---護眼燈和兼容性高的手電筒實現

編輯:關於Android編程

程序主要有兩個功能,一是護眼燈,二是手電筒,然而手電筒兼容性解決辦法就是加入異常控制,避免各種異常占用啟動不了手電筒.
程序主界面,沒有美化,只實現基本功能.
這裡寫圖片描述

部分代碼:
護眼蒙板主要代碼

    private void CreateView() {
        mWindowManager = (WindowManager) getApplication()
                .getSystemService(Context.WINDOW_SERVICE);
        wmParams = new WindowManager.LayoutParams();
        // 電話窗口。它用於電話交互(特別是呼入)。它置於所有應用程序之上,狀態欄之下。
        wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;
        //設置圖片格式,效果為背景透明
        wmParams.format = PixelFormat.RGBA_8888;
        // 設置浮動窗口不可聚焦(實現操作除浮動窗口外的其他可見窗口的操作)
        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
        //調整懸浮窗顯示的停靠位置為左側置頂
        wmParams.gravity = Gravity.LEFT | Gravity.TOP;
        wmParams.x = 0;
        wmParams.y = 0;
        //設置懸浮窗口長寬數據
        wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        wmParams.height = WindowManager.LayoutParams.MATCH_PARENT;
        v = new MyView(getApplicationContext());
        mWindowManager.addView(v, wmParams);
    }

手電筒主要代碼

    /**
     * 打開或者關閉手電筒
     */
    private View.OnClickListener flash = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // 先判斷是否有閃光燈
            if (!getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_CAMERA_FLASH)) {
                Toast.makeText(MainActivity.this, 當前設備沒有閃關燈, Toast.LENGTH_LONG).show();
                return;
            }
            if (flashstate){
                close();
                btnstartflash.setText(開啟手電筒);
            }else if (!flashstate){
                open();
                btnstartflash.setText(關閉手電筒);
            }

        }
    };


        private void initflashmode() {
            try {
                camera = Camera.open();
                camera.setPreviewTexture(new SurfaceTexture(0));
            } catch (IOException e) {
                close();
            }
            if (camera != null) {
                parameters = camera.getParameters();
                previousflashmode = parameters.getFlashMode();
            }
            if (previousflashmode == null) {
                previousflashmode = Camera.Parameters.FLASH_MODE_OFF;
            }
        }

        //關閉相機
        private void close() {
            if (camera!=null){
                parameters.setFlashMode(previousflashmode);
                camera.setParameters(parameters);
                camera.release();
                camera = null;
                flashstate = false;
            }
        }
        //打開相機
        private void open(){

            if (camera==null) {
                initflashmode();
            }
            if (camera!=null){
                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                camera.setParameters(parameters);
                camera.startPreview();
                flashstate = true;
            }

        }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved