手电筒(安卓应用开发)
一个安卓设备中的手电筒应用可以有多简单?!
首先,使用Android Studio创建一个新的应用,使用“Empty Activity”类型即可,如下图。
创建新项目
接下来是应用的参数定义,如下图。
项目参数设置
这里,将应用名定义为Flashlight,包名使用com.caohuayu.flashlight,应用保存的位置(Save location)根据实际情况设置即可。
安卓设备中,手电功能需要使用相机的闪光灯进行操作,此时需要使用相机的权限,在AndroidManifest.xml配置文件中的的权限声明如下。
XML |
<uses-permission android:name="android.permission.CAMERA" />
|
接下来是Activity的布局设计,这里,只需要一个线性布局作为容器和一个操作按钮,activity_main.xml文件中的布局设计如下。
XML |
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button android:id="@+id/btnSwitch"
android:text="ON/OFF"
android:layout_height="match_parent"
android:layout_width="match_parent"></Button>
</LinearLayout>
|
最后是Java代码部分,首先是MainActivity类的基本定义,以及相关对象和变量的定义,如下面的代码(MainActivity.java)。
Java |
package com.caohuayu.flashlight;
import androidx.appcompat.app.AppCompatActivity;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity
implements View.OnClickListener {
private boolean lightStatus=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
Button btn = (Button)findViewById(R.id.btnSwitch);
btn.setOnClickListener(this);
//
lightOn();
}
@Override
public void onClick(View v){
if(v.getId()==R.id.btnSwitch){
if(lightStatus) lightOff();
else lightOn();
}
}
// 其它代码…
}
|
MainActivity类中定义了一个boolean类型的变量lightStatus,用于标识闪光灯的状态,当其值为true时表示打开,为false时表示关闭。
此外,闪光灯的打开和关闭分别使用了lightOn()和lightOff()方法,定义如下。
Java |
// 开灯
private void lightOn(){
try{
CameraManager cm =
(CameraManager)getSystemService(CAMERA_SERVICE);
cm.setTorchMode("0",true);
lightStatus=true;
}catch (Exception ex){
ex.printStackTrace();
}
}
// 关灯
private void lightOff(){
try{
CameraManager cm =
(CameraManager)getSystemService(CAMERA_SERVICE);
cm.setTorchMode("0",false);
lightStatus=false;
}catch (Exception ex){
ex.printStackTrace();
}
}
|
代码中,控制相机时使用了CameraManager对象,可以使用上下文中的getSystemService()方法获取系统服务对象,这里,相机的服务名使用CAMERA_SERVICE定义。
在CameraManager对象中,使用setTorchMode()方法控制闪光灯,其中,参数一使用字符串设置相机ID,这里使用"0"即可;参数二设置闪光灯状态,true表示打开,false表示关闭。
此外,附件中包含了可安装的.apk文件;扩展资源中提供了完整的源代码。