lssjzmn安卓手电筒源码.docx
《lssjzmn安卓手电筒源码.docx》由会员分享,可在线阅读,更多相关《lssjzmn安卓手电筒源码.docx(19页珍藏版)》请在冰豆网上搜索。
lssjzmn安卓手电筒源码
注意:
1.不带图标资源,可以自己画一个
2.编译平台为Eclipse最低安卓版本为v4.0
3.工程源码下载地址:
第一部分:
java源码(共两个.java)
MainActivity.java
packagecom.lssjzmn.zm_flash;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.graphics.Color;
importandroid.hardware.Camera;
importandroid.hardware.Camera.Parameters;
importandroid.hardware.Sensor;
importandroid.hardware.SensorEvent;
importandroid.hardware.SensorEventListener;
importandroid.hardware.SensorManager;
importandroid.os.Bundle;
importandroid.os.Vibrator;
importandroid.view.KeyEvent;
importandroid.view.View;
importandroid.view.Window;
importandroid.widget.Button;
importandroid.widget.ImageButton;
importandroid.widget.ImageView;
importandroid.widget.RelativeLayout;
importandroid.widget.TextView;
importandroid.widget.Toast;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.app.Service;
importandroid.content.DialogInterface;
importandroid.content.Intent;
importandroid.content.IntentFilter;
importandroid.content.pm.FeatureInfo;
importandroid.content.pm.PackageManager;
publicclassMainActivityextendsActivityimplementsSensorEventListener{
privateCameramCamera;
privateParametersparam;
privateImageViewmImageViewbg;
privateTextViewmTextView1;
privateTextViewmTextView2;
privateTextViewmTextView3;
privateSensorManagermSensorManager=null;
privateSensormSensor=null;
privateTimermTimer;
privateTimerTaskmTimerTask;
privateVibratormVibrator;
privateAlertDialogmdialog;
privatestaticBooleanisFlashOn=false;
privateBooleanisFalshExists=false;
privateBooleanisSosOn=false;
privateBooleanisTimerOff=false;
privateBooleanisVibratorable=false;
privateintlux,mi=0;
privateintremain=2,counter=2;
privatelongmExitTime=0;
privatelongmFlashPeriod=600;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
HomeKeyExithomeKeyExitReceiver=newHomeKeyExit();//生成注册广播接收
registerReceiver(homeKeyExitReceiver,newIntentFilter(
Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
checkflash();
mCamera=Camera.open();
param=mCamera.getParameters();
mVibrator=(Vibrator)getApplication().getSystemService(
Service.VIBRATOR_SERVICE);
mSensorManager=(SensorManager)getApplication().getSystemService(
Service.SENSOR_SERVICE);
mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
mSensorManager.registerListener(this,mSensor,
SensorManager.SENSOR_DELAY_GAME);
//创建对话框
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle("选择闪烁速度");
//创建选项数组
String[]options={"快","中(默认)","慢"};
builder.setItems(options,dialogListener);//设置选项
builder.setNegativeButton("确定",null);
mdialog=builder.create();//创建对话框
mTextView1=(TextView)findViewById(R.id.textView);
mTextView2=(TextView)findViewById(R.id.speeddisp);
mTextView2.setText("当前闪烁速度:
默认");
mTextView3=(TextView)findViewById(R.id.isvibratoring);
mTextView3.setText("非振动模式");
mImageViewbg=(ImageView)findViewById(R.id.backgrd);
ImageButtonbtnon=(ImageButton)findViewById(R.id.on);
btnon.setOnClickListener(//匿名内层类
newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(isSosOn==true){
mTimer.cancel();
isSosOn=false;
isTimerOff=true;
}
flashOn(mCamera,param);
}
});
ImageButtonbtnoff=(ImageButton)findViewById(R.id.off);
btnoff.setOnClickListener(//匿名内层类
newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(isSosOn==true){
mTimer.cancel();
isSosOn=false;
isTimerOff=true;
}
if(isFlashOn==true){
flashOff(mCamera,param);
}else
return;
}
});
ImageButtonbtnvib=(ImageButton)findViewById(R.id.vibrator);
btnvib.setOnClickListener(//匿名内层类
newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
remain=counter%2;
if(remain==1){
isVibratorable=false;
counter+=1;
mTextView3.setText("非振动模式");
}else{
isVibratorable=true;
counter+=1;
mTextView3.setText("光敏感振动模式");
}
}
});
mTimer=newTimer();
mTimerTask=newsosTimerTask();
ImageButtonbtnsos=(ImageButton)findViewById(R.id.bntsos);
btnsos.setOnClickListener(//匿名内层类
newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(isTimerOff==true){
mTimer=newTimer();
mTimerTask=newsosTimerTask();
isTimerOff=false;
}
if(isSosOn==false){
isSosOn=true;
isFlashOn=true;
try{
flashOff(mCamera,param);
mTimer.schedule(mTimerTask,0,mFlashPeriod);
switch((int)mFlashPeriod){
case300:
mTextView2.setText("当前闪烁速度:
快");
break;
case600:
mTextView2.setText("当前闪烁速度:
默认");
break;
case1000:
mTextView2.setText("当前闪烁速度:
慢");
break;
}
}catch(Exceptione){
Toast.makeText(MainActivity.this,"闪烁未成功!
",
Toast.LENGTH_LONG).show();
}
}
}
});
}
//对话框选项的监听对象
DialogInterface.OnClickListenerdialogListener=newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intspeed){
switch(speed){
case0:
mFlashPeriod=500;//快
mTextView2.setText("当前闪烁速度:
快");
break;
case1:
mFlashPeriod=700;//中(默认)
mTextView2.setText("当前闪烁速度:
默认");
break;
case2:
mFlashPeriod=1000;//慢
mTextView2.setText("当前闪烁速度:
慢");
break;
}
}
};
publicvoidaboutApp(){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle("关于手电筒")
.setMessage("名称:
ZM_Flash\n作者:
lssjzmn\n时间:
2014/4/4")
.setPositiveButton("我知道了",
newDialogInterface.OnClickListener(){
publicvoidonClick(
DialogInterfacedialoginterface,inti){
//Donothing
}
}).show();
}
publicvoidcheckflash(){
PackageManagerpm=this.getPackageManager();
FeatureInfo[]features=pm.getSystemAvailableFeatures();
for(FeatureInfof:
features){
if(PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)){
isFalshExists=true;
return;
}
}
if(!
isFalshExists==true){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle("提醒")
.setMessage("没有找到可用的闪光灯设备\n确认并退出程序")
.setPositiveButton("确认",
newDialogInterface.OnClickListener(){
publicvoidonClick(
DialogInterfacedialoginterface,inti){
finish();
System.exit(0);
}
}).show();
}else{
return;
}
}
publicvoidflashOff(CameramCamera,Parametersparam){
mImageViewbg.setBackground(getResources().getDrawable(
R.drawable.flashoff));
param.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(param);
mCamera.stopPreview();
isFlashOn=false;
}
publicvoidflashOn(CameramCamera,Parametersparam){
mImageViewbg.setBackground(getResources().getDrawable(
R.drawable.flashon));
param.setFlashMode(Parameters.FLASH_MODE_TORCH);//只用FLASH_MODE_TORCH
//mImageViewbg.setBackgroundColor(Color.parseColor("#333333"));
mCamera.setParameters(param);
mCamera.startPreview();
isFlashOn=true;
}
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
switch(keyCode){
caseKeyEvent.KEYCODE_BACK:
if((System.currentTimeMillis()-mExitTime)>2000){
Toast.makeText(this,"再按一次退出手电筒",Toast.LENGTH_SHORT).show();
mExitTime=System.currentTimeMillis();
}else{
finish();
System.exit(0);
}
returntrue;
default:
break;
}
returnsuper.onKeyDown(keyCode,event);
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
if(mCamera!
=null){
mCamera.release();
mCamera=null;
}
mTimer.cancel();
}
@Override
publicvoidonAccuracyChanged(Sensorarg0,intarg1){
}
@Override
publicvoidonSensorChanged(SensorEventevent){
lux=(int)event.values[0];
mTextView1.setText("光照度Lux="+lux+"/10000");
if(isVibratorable==true)
vibrator();
}
publicvoidvibrator(){
if(lux<=20)
mVibrator.vibrate(newlong[]{300,500},-1);
}
publicvoidspeed(Viewv){
if(isFlashOn)
flashOff(mCamera,param);
mdialog.show();
}
publicvoidexit(Viewv){
finish();
System.exit(0);
}
publicvoidabout(Viewv){
aboutApp();
}
classsosTimerTaskextendsTimerTask{
@Override
publicvoidrun(){
MainActivity.this.runOnUiThread(newRunnable(){
@Override
publicvoidrun(){
flashOn(mCamera,param);
for(inti=0;i<1000;i++){//useless
mi+=i;
}
flashOff(mCamera,param);
}
});
}
}
}
HomeKeyExit.java
packagecom.lssjzmn.zm_flash;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
classHomeKeyExitextendsBroadcastReceiver{
staticfinalStringSYSTEM_REASON="reason";
staticfinalStringSYSTEM_HOME_KEY="homekey";//homekey
staticfinalStringSYSTEM_RECENT_APPS="recentapps";//longhomekey
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Stringaction=intent.getAction();
if(action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
Stringreason=intent.getStringExtra(SYSTEM_REASON);
if(reason!
=null){
if(reason.equals(SYSTEM_HOME_KEY)){
//homekey
System.exit(0);
}elseif(reason.equals(SYSTEM_RECENT_APPS))