水平这么烂真是惭愧。。
这年头,想找一个没有广告,体积小巧的手电筒都不容易(好吧我知道大部分手机已经自己带了)
除了闪光灯以外,屏幕也可以用作手电筒(适合于那些没有闪光灯的平板或山寨机。。),即把背景设置为白色,把亮度调到最高。
运行效果如下(点击横线上方任意部分开启、关闭前置,点击横线下方任意部分开启、关闭后置):
如果不在意如何实现,可以直接——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