Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使LED手电筒在接到来电时闪烁?_Java_Android - Fatal编程技术网

Java 如何使LED手电筒在接到来电时闪烁?

Java 如何使LED手电筒在接到来电时闪烁?,java,android,Java,Android,我试图使LED闪光灯在设备接到来电时闪烁。这就是我在服务课上的表现 public class MyService extends Service { Camera cam = null; boolean offhook = false; @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags,

我试图使LED闪光灯在设备接到来电时闪烁。这就是我在服务课上的表现

public class MyService extends Service {
Camera cam = null;
boolean offhook = false;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    String state = intent.getStringExtra("state");

    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
        if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH) && !offhook) {


                String myString = "01010101010101010101";
                long blinkDelay = 50;



                for (int i = 0; i < myString.length(); i++) {
                    if (myString.charAt(i) == '0') {
                        // params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
                        cam = Camera.open();
                        Camera.Parameters p = cam.getParameters();
                        p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                        cam.setParameters(p);
                    } else {
                        // params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                        offhook = true;
                        if (cam != null) {
                            cam.stopPreview();
                            cam.release();
                            cam = null;
                        }
                        this.stopSelf();
                    }

                    try {
                        Thread.sleep(blinkDelay);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }



        }
    }

    if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {
        if (!offhook) {
            if (cam != null) {
                cam.release();
                cam = null;
            }
            this.stopSelf();
        } else {
            offhook = false;
        }
    }

    if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) {
        offhook = true;
        if (cam != null) {
            cam.stopPreview();
            cam.release();
            cam = null;
        }
        this.stopSelf();
    }

    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
    if (cam != null) {
        cam.release();
        cam = null;
    }
    super.onDestroy();
}
}
公共类MyService扩展服务{
摄像机摄像机=null;
布尔offhook=false;
@凌驾
公共IBinder onBind(意向){
返回null;
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
字符串状态=intent.getStringExtra(“状态”);
if(TelephonyManager.EXTRA_STATE_RINGING.equals(STATE)){
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE\u摄像头\u闪光灯)&&&!offhook){
字符串myString=“01010101010101010101”;
长闪烁延迟=50;
对于(int i=0;i

但即使在我参加或拒绝通话后,眨眼也不会停止,因为这是一个for循环。我该怎么做呢?

不要用onStartCommand编写代码,因为这个方法将在主线程上执行,所以很可能会得到ANR。
要停止LED闪烁,请在接听或拒绝呼叫时中断线程,并放置一个for循环中断,使其脱离循环。

@carl Manaster:如何中断for循环?抱歉-这是@Ayanp的答案;我只是编辑它来整理语法。我不知道。在InterruptedException的catch块中,您可以放置break语句。您需要中断线程。。。从EXTRA_STATE_OFFHOOK为线程命名,如我前面所说,并调用threadname.interrupt