如何在屏幕锁定后保持Android相机闪光灯亮起

时间:2015-09-04 16:43:53

标签: java android android-service

我正在为Android创建一个flash light应用程序。我正在使用服务来打开和关闭闪存。一切都很好。但是当屏幕锁定闪光灯自动关闭且服务已经运行时。这种情况只发生在从充电器上拔下的设备上。当设备充电时,闪光灯会在屏幕锁定后继续打开。如何避免此问题。

这是我的FlashLightService.java文件

public class FlashLightService extends Service {
    Camera camera;
    Camera.Parameters parameters;
    static boolean isTurnOn;
    static int usedTime = 0;
    static String TAG = "coretorch_service";
Thread t;
static String formattedTime;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "Torch turned on", Toast.LENGTH_SHORT).show();
    isTurnOn = true;

    t =new Thread(new Runnable() {
        @Override
        public void run() {
            while (isTurnOn){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                usedTime++;
            }
            usedTime = 0;
        }
    });

    t.start();

    camera = Camera.open();
    parameters = camera.getParameters();

    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    camera.setParameters(parameters);
    camera.startPreview();

    return START_NOT_STICKY;
}

@Override
public void onDestroy() {
    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    camera.setParameters(parameters);
    camera.stopPreview();
    camera.release();
    isTurnOn = false;
    super.onDestroy();
    Toast.makeText(this, "Torch turned off", Toast.LENGTH_SHORT).show();
}

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

public static boolean getFlashStatus() {
    return isTurnOn;
}

public static String getUsedTime(){
    formattedTime = toTimeFormat(usedTime);
    return formattedTime;
}

static String toTimeFormat(int secs){
    String time;
    int mins;
    int seconds;

    if (secs < 60){
        time = String.valueOf(secs) + " sec";
    }
    else {
        mins = (secs / 60);
        seconds = (secs - (mins * 60));
        time = String.valueOf(mins) + " mins " + String.valueOf(seconds) + " sec";
    }

    return time;
 }
  }

1 个答案:

答案 0 :(得分:0)

@Override
protected void onPause() {
    Camera.open().getParameters().setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
};
你能做这样的事吗?我从未玩过相机