我试着让手电筒在连续按下一个按钮时闪烁,直到按钮再次被按下。闪光灯一直在闪烁,但我无法停止闪烁,因为应用程序冻结。以下是我的代码:
public void Buts1(View view) {
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
long blinkDelay = 50;//delay in ms
if(textView.getText().toString().equals("ON")){
boolean s=false;
while (textView.getText().toString().equals("ON")){
if(s){
try {
String cameraId = cameraManager.getCameraIdList()[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cameraManager.setTorchMode(cameraId, true);
}
} catch (CameraAccessException e) {
}
s=false;
}else{
try {
String cameraId = cameraManager.getCameraIdList()[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cameraManager.setTorchMode(cameraId, false);
}
} catch (CameraAccessException e) {
}
s=true;
}
try {
Thread.sleep(blinkDelay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
发布于 2019-12-24 16:51:53
我相信你在这里冻结了UI线程。我也没有看到任何将textView文本设置为"OFF“的东西。
我稍微修改了您的代码,它假定textView以文本"OFF“开头,当您单击按钮时将更改为"ON”。再次单击该按钮将把textView文本设置为" off“,并关闭闪烁。这是通过在单独的线程而不是UI线程上工作的。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
Thread flashThread = new Thread(new Runnable() {
@Override
public void run() {
boolean s=false;
long blinkDelay = 50;//delay in ms
while (textView.getText().toString().equals("ON")){
if(s){
try {
String cameraId = cameraManager.getCameraIdList()[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cameraManager.setTorchMode(cameraId, true);
}
} catch (CameraAccessException e) {
}
s=false;
}else{
try {
String cameraId = cameraManager.getCameraIdList()[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cameraManager.setTorchMode(cameraId, false);
}
} catch (CameraAccessException e) {
}
s=true;
}
try {
Thread.sleep(blinkDelay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
if(textView.getText().toString().equalsIgnoreCase("OFF")){
textView.setText("ON");
flashThread.start();
}else{
flashThread.interrupt();
try {
String cameraId = cameraManager.getCameraIdList()[0];
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cameraManager.setTorchMode(cameraId, false);
}
} catch (CameraAccessException e) {
}
textView.setText("OFF");
}
}
});
https://stackoverflow.com/questions/59471258
复制相似问题