Java 如何在按下“主页”按钮时保持手电筒打开?

Java 如何在按下“主页”按钮时保持手电筒打开?,java,android,service,flashlight,background-service,Java,Android,Service,Flashlight,Background Service,我正在开发一个非常简单的手电筒应用程序,虽然我已经成功地实现了我所寻找的,但我想以我想要的方式来执行它。当前,当我的活动处于活动状态时,我的手电筒保持打开状态,只要我按下“主页”按钮以最小化活动,手电筒就会关闭。我希望只有在我单击活动中的“关闭”按钮时,手电筒才能保持打开和关闭 public class FlashLightActivity extends Activity { ImageButton btnSwitch; private Camera camera; private bo

我正在开发一个非常简单的手电筒应用程序,虽然我已经成功地实现了我所寻找的,但我想以我想要的方式来执行它。当前,当我的活动处于活动状态时,我的手电筒保持打开状态,只要我按下“主页”按钮以最小化活动,手电筒就会关闭。我希望只有在我单击活动中的“关闭”按钮时,手电筒才能保持打开和关闭

public class FlashLightActivity extends Activity {


ImageButton btnSwitch;

private Camera camera;
private boolean isFlashOn;
private boolean hasFlash;
Parameters params;
MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);

    // flash switch button
    btnSwitch = (ImageButton) findViewById(R.id.btnSwitch);

    /*
     * First check if device is supporting flashlight or not
     */
    hasFlash = getApplicationContext().getPackageManager()
            .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

    if (!hasFlash) {
        // device doesn't support flash
        // Show alert message and close the application
        AlertDialog alert = new AlertDialog.Builder(FlashLightActivity.this)
                .create();
        alert.setTitle("Error");
        alert.setMessage("Sorry, your device doesn't support flash light!");
        alert.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // closing the application
                finish();
            }
        });
        alert.show();
        return;
    }

    // get the camera
    getCamera();

    // displaying button image
    toggleButtonImage();

    /*
     * Switch button click event to toggle flash on/off
     */
    btnSwitch.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (isFlashOn) {
                // turn off flash
                turnOffFlash();
            } else {
                // turn on flash
                turnOnFlash();
            }
        }
    });
}

/*
 * Get the camera
 */
private void getCamera() {
    if (camera == null) {
        try {
            camera = Camera.open();
            params = camera.getParameters();
        } catch (RuntimeException e) {
            Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
        }
    }
}

/*
 * Turning On flash
 */
private void turnOnFlash() {
    if (!isFlashOn) {
        if (camera == null || params == null) {
            return;
        }
        // play sound
        playSound();

        params = camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(params);
        camera.startPreview();
        isFlashOn = true;

        // changing button/switch image
        toggleButtonImage();
    }

}

/*
 * Turning Off flash
 */
private void turnOffFlash() {
    if (isFlashOn) {
        if (camera == null || params == null) {
            return;
        }
        // play sound
        playSound();

        params = camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_OFF);
        camera.setParameters(params);
        camera.stopPreview();
        isFlashOn = false;

        // changing button/switch image
        toggleButtonImage();
    }
}

/*
 * Playing sound
 * will play button toggle sound on flash on / off
 * */
private void playSound(){
    if(isFlashOn){
        mp = MediaPlayer.create(FlashLightActivity.this, R.raw.light_switch_off);
    }else{
        mp = MediaPlayer.create(FlashLightActivity.this, R.raw.light_switch_on);
    }
    mp.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp.release();
        }
    }); 
    mp.start();
}

/*
 * Toggle switch button images
 * changing image states to on / off
 * */
private void toggleButtonImage(){
    if(isFlashOn){
        btnSwitch.setImageResource(R.drawable.on);
    }else{
        btnSwitch.setImageResource(R.drawable.off);
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
}

@Override
protected void onPause() {
    super.onPause();

    // on pause turn off the flash
    turnOffFlash();
}

@Override
protected void onRestart() {
    super.onRestart();
}

@Override
protected void onResume() {
    super.onResume();

    // on resume turn on the flash
    if(hasFlash)
        turnOnFlash();
}

@Override
protected void onStart() {
    super.onStart();

    // on starting the app get the camera params
    getCamera();
}

@Override
protected void onStop() {
    super.onStop();

    // on stop release the camera
    if (camera != null) {
        camera.release();
        camera = null;
    }
}
}

拆下开关闪光灯();从onPause()方法删除resume上的代码表单,因为您已将功能的转换绑定到活动的生命周期,因此在调用onPause时,当您最小化时,它将关闭。为了实现此功能,您必须停止活动被终止。当您最小化它在onPause方法中输入的应用程序时,您正在关闭onPause MethodOK中的flash。谢谢,亲爱的@皮尤斯,sud@piyush当按下home(主页)按钮时,你能写下打开手电筒的代码吗?取下关闭闪光灯();从onPause()方法删除resume上的代码表单,因为您已将功能的转换绑定到活动的生命周期,因此在调用onPause时,当您最小化时,它将关闭。为了实现此功能,您必须停止活动被终止。当您最小化它在onPause方法中输入的应用程序时,您正在关闭onPause MethodOK中的flash。谢谢,亲爱的@皮尤斯,sud@piyush当按下home(主页)按钮时,您是否可以编写打开手电筒的代码?