教你快速完成一个手机手电筒功能
我们都知道手机上有手电筒这一项功能,它就是用手机里的一个功能键打开手机前端或者后面的LED发光二极管,使其长期处于发光状态,下面我就教大家做一个简易的手机手电筒的功能
首先呢先在自己的开发工具上(Android studio或eclipse)上新建一个项目。
然后我们在布局里面定义两个按钮,一个用来打开手电筒,一个用来关闭手电筒,看代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="text.bwei.com.shoudiantong.MainActivity">
<Button
android:id="@+id/btn_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="打开手电筒" />
<Button
android:id="@+id/btn_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭手电筒" />
</LinearLayout>
然后在我们的代码里写:
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
/**
* Effect:手电筒
* autour: 张玉杰
* date: 2016/12/12 11:18
* update: 2016/12/12
*/
public class MainActivity extends AppCompatActivity {
private CameraManager manager;// 声明CameraManager对象
private Camera m_Camera = null;// 声明Camera对象
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnOpen = (Button) findViewById(R.id.btn_open);
Button btnClose = (Button) findViewById(R.id.btn_close);
manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String[] camerList = manager.getCameraIdList();
for (String str : camerList) {
}
} catch (CameraAccessException e) {
Log.e("error", e.getMessage());
}
btnOpen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
lightSwitch(false);
}
});
btnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
lightSwitch(true);
}
});
}
/**
* 手电筒控制方法
*
* @param lightStatus
* @return
*/
private void lightSwitch(final boolean lightStatus) {
if (lightStatus) { // 关闭手电筒
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
manager.setTorchMode("0", false);
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (m_Camera != null) {
m_Camera.stopPreview();
m_Camera.release();
m_Camera = null;
}
}
} else { // 打开手电筒
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
manager.setTorchMode("0", true);
} catch (Exception e) {
e.printStackTrace();
}
} else {
final PackageManager pm = getPackageManager();
final FeatureInfo[] features = pm.getSystemAvailableFeatures();
for (final FeatureInfo f : features) {
if (PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) { // 判断设备是否支持闪光灯
if (null == m_Camera) {
m_Camera = Camera.open();
}
final Camera.Parameters parameters = m_Camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
m_Camera.setParameters(parameters);
m_Camera.startPreview();
}
}
}
}
}
/**
* 判断Android系统版本是否 >= M(API23)
*/
private boolean isM() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return true;
} else {
return false;
}
}
}
大家不要以为这样就完了,最后还要给自己的手电筒添加权限,大家肯定都知道其中的一个,那就是调用自己手机上的拍照权限,不要担心手机会拍照,只是开启手电筒必需的一个权限而已,下面看代码:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="text.bwei.com.shoudiantong">
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.autofocus" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这里不用全部粘完,只需要将里面的四个权限粘到自己项目的清单文件里面就行了
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.autofocus" />
完成这些那么恭喜,你可以运行到自己的手机上给这个世界增添一些光明吧。。。
(注意:在模拟器上运行的同学需要提前知道模拟器上是否可以查看手电筒的效果)