android service开灯关灯
时间: 2023-08-05 15:07:42 浏览: 70
要在 Android Service 中控制灯的开关,需要使用硬件控制API和权限。以下是一个简单的示例:
```java
public class LightService extends Service {
private Camera mCamera;
private boolean isFlashOn;
private boolean hasFlash;
private Parameters params;
@Override
public void onCreate() {
super.onCreate();
// 获取相机实例
mCamera = Camera.open();
params = mCamera.getParameters();
hasFlash = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 接收来自Activity的指令
String action = intent.getAction();
if (action.equals("ACTION_TURN_ON")) {
turnOnFlash();
} else if (action.equals("ACTION_TURN_OFF")) {
turnOffFlash();
}
return super.onStartCommand(intent, flags, startId);
}
// 开启闪光灯
private void turnOnFlash() {
if (!isFlashOn && hasFlash) {
params = mCamera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(params);
mCamera.startPreview();
isFlashOn = true;
}
}
// 关闭闪光灯
private void turnOffFlash() {
if (isFlashOn && hasFlash) {
params = mCamera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
mCamera.stopPreview();
isFlashOn = false;
}
}
@Override
public void onDestroy() {
super.onDestroy();
// 释放相机资源
if (mCamera != null) {
mCamera.release();
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
```
在 Activity 中,通过以下代码启动 Service 并发送指令:
```java
Intent intent = new Intent(this, LightService.class);
intent.setAction("ACTION_TURN_ON"); // 开灯指令
startService(intent);
intent.setAction("ACTION_TURN_OFF"); // 关灯指令
startService(intent);
```
需要确保在 AndroidManifest.xml 中声明相应的权限:
```xml
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.flash" />
```