Android 通用型手电筒代码
前几天这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。
我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。
MainActivity.class
publicclassMainActivityextendsFragmentActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(isFlashSupported()){
if(savedInstanceState==null){
getSupportFragmentManager().beginTransaction().add(R.id.container,newFlashlightFragment()).commit();
}
}else{
showNoFlashAlert();
}
}
privatevoidshowNoFlashAlert(){
newAlertDialog.Builder(this)
.setMessage(R.string.device_not_support_msg)
.setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.device_not_support_title)
.setPositiveButton(R.string.ok,newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
dialog.dismiss();
finish();
}
}).create().show();
}
privatebooleanisFlashSupported(){
PackageManagerpm=getPackageManager();
returnpm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
publicstaticclassFlashlightFragmentextendsFragmentimplementsSurfaceHolder.Callback{
publicFlashlightFragment(){}
ImageButtonbtnSwitch;
ImageViewbg;
privatebooleanisLighOn=false;
privateCameracamera;
Camera.Parametersparams;
@Override
publicvoidonStart(){
super.onStart();
SurfaceViewpreview=(SurfaceView)getView().findViewById(R.id.PREVIEW);
SurfaceHoldermHolder=preview.getHolder();
mHolder.addCallback(this);
}
@Override
publicvoidonPause(){
super.onPause();
turnOffFlash();
}
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){
Viewview=inflater.inflate(R.layout.fragment_main_activity,container,false);
//flashswitchbutton
btnSwitch=(ImageButton)view.findViewById(R.id.flashlight_button);
bg=(ImageView)view.findViewById(R.id.flashlight_bg);
//displayingbuttonimage
toggleBgImage();
//Switchbuttonclickeventtotoggleflashon/off
btnSwitch.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(isLighOn){
turnOffFlash();
}else{
turnOnFlash();
}
}
});
returnview;
}
//TurningOnflash
privatevoidturnOnFlash(){
if(!isLighOn){
if(camera==null||params==null){
return;
}
params=camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isLighOn=true;
toggleBgImage();
}
}
//TurningOffflash
privatevoidturnOffFlash(){
if(isLighOn){
if(camera==null||params==null){
return;
}
params=camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isLighOn=false;
toggleBgImage();
}
}
privatevoidtoggleBgImage(){
if(isLighOn){
bg.setImageResource(R.mipmap.f_on);
}else{
bg.setImageResource(R.mipmap.f_off);
}
}
@Override
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolderholder){
if(camera!=null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera=null;
}
}
@Override
publicvoidsurfaceCreated(SurfaceHolderholder){
if(camera==null){
camera=Camera.open();
params=camera.getParameters();
try{
camera.setPreviewDisplay(holder);
}catch(IOExceptione){
camera.release();
camera=null;
}
}
turnOnFlash();
}
}
}
fragment_main_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <SurfaceView android:id="@+id/PREVIEW" android:layout_width="1dp" android:layout_height="1dp"/> <ImageView android:id="@+id/flashlight_bg" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@mipmap/f_on" android:scaleType="centerCrop" /> <ImageButton android:id="@+id/flashlight_button" android:layout_width="100dp" android:layout_height="200dp" android:layout_centerInParent="true" android:background="@android:color/transparent" android:text="fuck"/> </RelativeLayout>
activity_main.xml
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" />
AndroidManifest.xml
<?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.liujinghuiuncleapp.app.tool.flashlight"> <uses-permissionandroid:name="android.permission.CAMERA"/> <uses-permissionandroid:name="android.permission.FLASHLIGHT"/> <uses-featureandroid:name="android.hardware.camera"/> <uses-featureandroid:name="android.hardware.camera.flash"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
以上所述就是本文的全部内容了,希望大家能够喜欢。