手电筒(安卓应用开发)

一个安卓设备中的手电筒应用可以有多简单?!

首先,使用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文件;扩展资源中提供了完整的源代码。

附件