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;
            }

        }

完整代码可以联系我[email protected]

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 21:37:18

android---护眼灯和兼容性高的手电筒实现的相关文章

Android Compatibility package 兼容性开发套件

我们认为Android 3.0平板电脑操作系统在美国时间2011年2月22日的正式推出,对于Android手机应用程序开发者所象征的意涵是: 之前大家所开发过的Android手机应用,除了可以在Android智能手机系统之上运行外,也因为Android 3.0平板电脑操作系统的向下兼容之故,致使这些Android手机应用能跨足到Android平板电脑操作系统的新领域之中. 然而,Android官方认为这还不够! 假若,专为Android 3.0平板电脑操作系统所开发的应用程序,能够兼容于其它An

Android——今日头条APP——高仿——ZYFNewsCTZF

Android--今日头条APP--高仿--ZYFNewsCTZF 图片效果:1 主页代码:MainActivity:     1.首页代码:SyFragment:             1.新闻频道代码:             2.新闻内容代码:              跳转--显示新闻详细内容              适配器--NewsBaseAdapter-NewsFragmentAdapter              entity--MyNews     2.我的代码:MyFr

android获取view宽高的几种方法

在onCreate方法中我们通过mView.getWidth()和mView.getHeight()获取到的view的宽高都是0,那么下面几种方法就可以在onCreate方法中获取到view的宽高. 1. int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED

浅谈android中加载高清大图及图片压缩方式(二)

这一讲就是本系列的第二篇,一起来聊下关于android中加载高清大图的问题,我们都知道如果我们直接加载原图的话,一个是非常慢,需要等待一定时间,如果没有在一定的时间内给用户响应的话,将会极大影响用户的体验.另一个是如果你的手机内存小的话,可能会直接崩溃.这也就是直接加载高清原图问题.遇到这些问题很容易想到的一点就是图片压缩,本篇文章也就是讲述图片压缩方式来实现加载高清大图的效果.但是现在问题就来了,通过上篇博客我们知道,手机的分辨率有很多,如何保证我同一张图片在不同分辨率的手机上能适当的压缩比例

Android第八期 - 高仿 WIN8系统 磁贴点击下沉倾斜效果源码

效果图, Android第八期 - 高仿 WIN8系统 磁贴点击下沉倾斜效果源码

Android控件:高仿微信主UI

高仿微信主UI 之前在Android组件:Fragment切换后保存状态 一文中讲到了Fragment切换后,是如何保存原来的状态的,最重要的就是用add方法取代现在各种教程常见的replace方法.然而我发现有不少App都貌似采用ViewPager + Fragment来做主UI的.于是在Android组件:Fragment切换后保存状态 的基础上加入了ViewPager,看了下微信界面,要高仿就尽力模仿到最像,所以也把ActionBar也修改成微信的样子. 先上一张效果图: 布局 我知道微信

Android CTS(兼容性测试)整个流程

为了保证开发的应用在所有兼容Android的设备上正常运行,并保证一致的用户体验,Google制定了CTS(Compatibility Test Suite)来确保设备运行的Android系统全面兼容Android规范,Google也提供了一份兼容性标准文档(Compatibility Definition Document, CDD). 在进行CTS之前,需要先从google官网下载相关文件,需要自卑梯子翻墙.下载链接: http://source.android.com/compatibil

(Android)如何将一个高复用性项目供其他项目使用(jar导出,导入,Is Library)(转)

我们做过一个项目,以后这个项目里的代码经常会被其他项目用到.对于这种复用性高的项目(后面称为“项目1”),要被其他项目使用(后面称为“项目2”),为了减少代码量,我们目前有两种方法. 一种方法是:将项目1打包成jar文件,导出,导入到项目2里,供项目2调用. 另一种方法:将项目1作为 Library供项目2调用. 一.jar导出,导入 1.jar导出 现在有一个现成的项目1 功能是竖立的SeekBar 这里面只有一个VerticalSeekBar类,无Activity和资源文件需要打包. 现在我

android获取屏幕宽高工具类

import java.lang.reflect.Field; import android.app.Activity; import android.content.Context; import android.graphics.Point; import android.util.DisplayMetrics; import android.view.Display; import android.view.Window; import android.view.WindowManager