SOSModule 之类的选项不起作用
Option like SOSModule didn't work
我正在尝试在我的应用程序中创建类似 SOS 模块的选项,我创建代码来处理此问题:
class SOSModule {
private Camera camera;
private Camera.Parameters params;
private boolean isFlashOn;
void blink(final int delay, final int times) {
Thread t = new Thread() {
public void run() {
try {
for (int i=0; i < times*2; i++) {
if (isFlashOn) {
turnOffFlash();
} else {
Camera.open();
turnOnFlash();
}
sleep(delay);
}
} catch (Exception e){
e.printStackTrace();
}
}
};
t.start();
}
void turnOnFlash() {
if (!isFlashOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
}
}
void turnOffFlash() {
if (isFlashOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isFlashOn = false;
}
}
}
我还在清单中添加了所有必需的权限,当然我会及时检查使用权限。
但这行不通。我只是创建了其他代码,但像 "one flash" 一样工作,没有任何循环。
你们能帮帮我吗?
伙计们,这对我来说很重要,我不能这样做,因为我的华为 p8 Lite 和 p9 Lite 在发生这种情况时不会出现任何错误,这是华为软件问题,我需要使用相机在心理设备上测试它一个大问题,我没有任何来自设备的日志。
public void flash_effect() throws InterruptedException
{
cam = Camera.open();
final Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
Thread a = new Thread()
{
public void run()
{
for(int i =0; i < 10; i++)
{
cam.setParameters(p);
cam.startPreview();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cam.stopPreview();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
a.start();
}}
此代码有效,但闪光灯打开无限远,没有任何闪烁效果
任何想法??
您需要一个标志来告诉您的线程何时停止。
boolean shouldStop = false;
while (!shouldStop){
if(FlashOn){
...//do SOS stuff
}
}
public void endSOS(){
shouldStop = true;
}
这是因为你的线程运行没有被调用
试试这个
void blink(final int delay, final int times) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i=0; i < times*2; i++) {
if (isFlashOn) {
turnOffFlash();
} else {
turnOnFlash();
}
Thread.sleep(delay);
}
} catch (Exception e){
e.printStackTrace();
}
}
});
t.start();
}
您可以在此处阅读更多内容
Thread: Not calling run method
我正在尝试在我的应用程序中创建类似 SOS 模块的选项,我创建代码来处理此问题:
class SOSModule {
private Camera camera;
private Camera.Parameters params;
private boolean isFlashOn;
void blink(final int delay, final int times) {
Thread t = new Thread() {
public void run() {
try {
for (int i=0; i < times*2; i++) {
if (isFlashOn) {
turnOffFlash();
} else {
Camera.open();
turnOnFlash();
}
sleep(delay);
}
} catch (Exception e){
e.printStackTrace();
}
}
};
t.start();
}
void turnOnFlash() {
if (!isFlashOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
}
}
void turnOffFlash() {
if (isFlashOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isFlashOn = false;
}
}
}
我还在清单中添加了所有必需的权限,当然我会及时检查使用权限。
但这行不通。我只是创建了其他代码,但像 "one flash" 一样工作,没有任何循环。
你们能帮帮我吗?
伙计们,这对我来说很重要,我不能这样做,因为我的华为 p8 Lite 和 p9 Lite 在发生这种情况时不会出现任何错误,这是华为软件问题,我需要使用相机在心理设备上测试它一个大问题,我没有任何来自设备的日志。
public void flash_effect() throws InterruptedException
{
cam = Camera.open();
final Camera.Parameters p = cam.getParameters();
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
Thread a = new Thread()
{
public void run()
{
for(int i =0; i < 10; i++)
{
cam.setParameters(p);
cam.startPreview();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cam.stopPreview();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
a.start();
}}
此代码有效,但闪光灯打开无限远,没有任何闪烁效果 任何想法??
您需要一个标志来告诉您的线程何时停止。
boolean shouldStop = false;
while (!shouldStop){
if(FlashOn){
...//do SOS stuff
}
}
public void endSOS(){
shouldStop = true;
}
这是因为你的线程运行没有被调用
试试这个
void blink(final int delay, final int times) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i=0; i < times*2; i++) {
if (isFlashOn) {
turnOffFlash();
} else {
turnOnFlash();
}
Thread.sleep(delay);
}
} catch (Exception e){
e.printStackTrace();
}
}
});
t.start();
}
您可以在此处阅读更多内容
Thread: Not calling run method