[安卓开发] Android 自己做双向手电筒 源代码

水平这么烂真是惭愧。。


这年头,想找一个没有广告,体积小巧的手电筒都不容易(好吧我知道大部分手机已经自己带了)


除了闪光灯以外,屏幕也可以用作手电筒(适合于那些没有闪光灯的平板或山寨机。。),即把背景设置为白色,把亮度调到最高。


运行效果如下(点击横线上方任意部分开启、关闭前置,点击横线下方任意部分开启、关闭后置):



如果不在意如何实现,可以直接——App下载



后置篇


打开闪光灯需要以下权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>

变量声明:

    private Camera mCamera;
    private Camera.Parameters mParameters;

开启代码如下:

判空是因为有可能被其他程序占用了摄像头导致无法开启 ,如果mCamera为空则会导致程序崩溃
                    mCamera=Camera.open();
                    if (mCamera==null) break;<span style="white-space:pre">	</span>
                    mParameters= mCamera.getParameters();
                    mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                    mCamera.setParameters(mParameters);
                    mCamera.startPreview();

关闭代码如下(camera是硬件设备,要及时释放占用):
 if (mCamera==null) break;
                    mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                    mCamera.setParameters(mParameters);
                    mCamera.release();


前置篇:


变量声明:
 private int savedCurrentBrightness;
    private static final int BRIGHTNESS_MAX=255;

获取屏幕亮度:
public static int getScreenBrightness(Activity activity) {
        int currentBrightnessValue = 0;
        ContentResolver resolver = activity.getContentResolver();
        try {
            currentBrightnessValue = android.provider.Settings.System.getInt(
                    resolver, Settings.System.SCREEN_BRIGHTNESS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return currentBrightnessValue;
    }


设置屏幕亮度:
public static void setBrightness(Activity activity, int brightness,int color) {
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
        activity.getWindow().setAttributes(lp);
        activity.getWindow().setBackgroundDrawable(activity.getResources().getDrawable(color));
    }


将亮度调到最高:
savedCurrentBrightness=getScreenBrightness(this);
                    setBrightness(this,BRIGHTNESS_MAX,R.color.colorWhite);



恢复到原来的亮度:

setBrightness(this,savedCurrentBrightness,R.color.colorBlack);


UI篇:

因为功能比较简单,所以将上半部分和下半部分分开作为两个功能

在开启程序时,去掉标题栏,设定全屏,并把背景颜色该为黑色(开关前置时也会调整背景颜色)
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setBackgroundDrawable(getResources().getDrawable(R.color.colorBlack));
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

设定屏幕常亮
WindowManager.LayoutParams params = getWindow().getAttributes();
        params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
        getWindow().setAttributes(params);



锁定屏幕朝向(这句话要放在 setContentView();之前)

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);




布局代码:
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_marginTop="36dp"
        android:text="@string/app_name"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/colorWhite"
        android:textSize="40sp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/front_control"
        android:layout_weight="1"
        android:layout_gravity="top"
        android:background="@android:color/transparent"/>

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="3dp"
        android:background="#ffffff" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/back_control"
        android:layout_weight="1"
        android:layout_gravity="bottom"
        android:background="@android:color/transparent"/>

    <TextView
        android:id="@+id/author"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="42dp"
        android:gravity="right"
        android:textColor="@color/colorWhite"
        android:text="@string/author" />


附录:

由于开启闪光灯后,如果退出当前活动(按返回键)闪光灯依然亮着,下次回到当前活动时,只能先开启闪光灯再关闭,因此可以写如下代码
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            if (mCamera!=null){
                mCamera.release();
            }
        }
        finish();
        return super.onKeyDown(keyCode, event);
    }

开启程序后,按返回键退出程序,按home键保持闪光灯亮,此时可以锁屏



App:http://fir.im/p82x
源代码:http://download.csdn.net/detail/martin20150405/9552360
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值