相机和SystemUI。
在android5.0的快捷开关上面有一个手电筒的开关,并且支持后台运行。
需要明确的一点就是,之所以他们两个不能一起使用是因为手电筒其实调用的也是相机里面的闪光灯。他们作为同一个硬件是不能一起使用的
首先看一下手电筒是怎么工作的:
/SystemUI_q5.1/src/com/android/systemui/statusbar/policy/FlashlightController.java
private void postUpdateFlashlight() {
ensureHandler();
mHandler.post(mUpdateFlashlightRunnable);
}
重点在于他如何实现Runnable接口的
private final Runnable mUpdateFlashlightRunnable = new Runnable() {
@Override
public void run() {
updateFlashlight(false /* forceDisable */);
}
};
private void updateFlashlight(boolean forceDisable) {
try {
boolean enabled;
synchronized (this) {
enabled = mFlashlightEnabled && !forceDisable;
}
if (enabled) {
if (mCameraDevice == null) {
startDevice();
return;
}
if (mSession == null) {
&n
在android5.0的快捷开关上面有一个手电筒的开关,并且支持后台运行。
需要明确的一点就是,之所以他们两个不能一起使用是因为手电筒其实调用的也是相机里面的闪光灯。他们作为同一个硬件是不能一起使用的
首先看一下手电筒是怎么工作的:
/SystemUI_q5.1/src/com/android/systemui/statusbar/policy/FlashlightController.java
private void postUpdateFlashlight() {
ensureHandler();
mHandler.post(mUpdateFlashlightRunnable);
}
重点在于他如何实现Runnable接口的
private final Runnable mUpdateFlashlightRunnable = new Runnable() {
@Override
public void run() {
updateFlashlight(false /* forceDisable */);
}
};
private void updateFlashlight(boolean forceDisable) {
try {
boolean enabled;
synchronized (this) {
enabled = mFlashlightEnabled && !forceDisable;
}
if (enabled) {
if (mCameraDevice == null) {
startDevice();
return;
}
if (mSession == null) {
&n

本文详细解析了Android系统中手电筒功能的工作原理及其与相机应用之间的冲突原因,并提供了解决方案,通过互相监听对方的状态来避免两者同时使用同一硬件资源。
最低0.47元/天 解锁文章
2939

被折叠的 条评论
为什么被折叠?



