gddhy

_(:з」∠)_ 加载中...
  • 主页
  • 归档
  • 工具
  • 关于
所有文章 友链

gddhy

_(:з」∠)_ 加载中...

  • 主页
  • 归档
  • 工具
  • 关于

安卓获取手电筒状态和开关手电筒

2021-06-26
字数统计:437字 阅读时长≈2分

这个是之前为努比亚Mini5G制作的小程序屏蔽相机按键的手电筒部分,整理文件时发现的源码还留着,记录一下,软件在酷安获取

开关手电筒

调用闪光灯硬件先申请权限

1
2
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA"/>

开关手电筒

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private CameraManager manager;
private Camera camera;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
...
if(manager == null){
manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
}
...
}

private void openFlash() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (manager != null) {
manager.setTorchMode("0", true);
}
} else {
camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
}
} catch (Exception e) {
e.printStackTrace();
}
}

private void closeFlash() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
if (manager == null) {
return;
}
manager.setTorchMode("0", false);
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (camera == null) {
return;
}
camera.stopPreview();
camera.release();
}
}

上面开关手电筒部分用到了 Mason-Xu/JustAFlashLight 项目的源码

获取手电筒状态

接上面代码,用下面这个可以在回调中获取手电筒状态

1
manager.registerTorchCallback(torchCallback, null);

获取到手电筒状态进行开启关闭操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback() {
@Override
public void onTorchModeChanged( String cameraId, boolean enabled) {
super.onTorchModeChanged(cameraId, enabled);
manager.unregisterTorchCallback(torchCallback);
if(!enabled){
//手电筒状态关闭,执行开启
openFlash();
} else {
//手电筒状态开启,执行关闭
closeFlash();
}
}
};

@Override
protected void onDestroy() {
super.onDestroy();
if(manager != null && torchCallback != null){
manager.unregisterTorchCallback(torchCallback);
}
}

获取到手电筒状态直接操作手电筒有时会闪烁直接关闭,经测试可以用下面代码解决

1
manager.unregisterTorchCallback(torchCallback);

获取手电筒状态,方法来自 android 9.0 获取手电筒状态以及打开/关闭手电筒

赏

谢谢你请我吃糖果

微信

扫一扫,分享到微信

微信分享二维码
360健康卫士
两个VR程序-初音ミク-GUMI
  1. 1. 开关手电筒
  2. 2. 获取手电筒状态
留言已关闭
:gddhy
© gddhy
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链

tag:

  • Android
  • 软件分享
  • game
  • Hexo
  • JavaScript
  • 旧机博物馆
  • MIUI
  • Java
  • git
  • Termux
  • mtk
  • 原神
  • Win
  • Html
  • 安卓学习笔记

    缺失模块

  • Luminous' Home
  • 影子博客
  • 四次元领域
  • 初之音
  • Mr.Pumpkin
  • ZhaoQuinn 's Blog