屏幕关闭时闪光灯关闭的原因是什么?

时间:2014-04-27 10:56:38

标签: android flash

我的应用程序是一个简单的火炬,它工作正常,但当手机关闭闪光灯也关闭,我想让它打开,直到我通过应用程序关闭它或杀死应用程序... 然后我想询问是否有可能通过这个应用程序关闭闪存,如果它由另一个应用程序打开,反之亦然...... 这是我的代码:

package com.example.flash;

import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.Toast;
import android.widget.ToggleButton;

public class FlashLight extends Activity {

    ImageButton l;
    Camera camera = Camera.open();
    final Context context = this;
    Camera.Parameters cp;
    boolean flag = false;
    boolean mode = false;
    String OFF = android.hardware.Camera.Parameters.FLASH_MODE_OFF;
    String ON = android.hardware.Camera.Parameters.FLASH_MODE_ON;
    String TORCH = android.hardware.Camera.Parameters.FLASH_MODE_TORCH;
    String AUTO = android.hardware.Camera.Parameters.FLASH_MODE_AUTO;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        final PackageManager pm = context.getPackageManager();

        if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
            cp = camera.getParameters();
            setContentView(R.layout.activity_main);

            l = (ImageButton) this.findViewById(R.id.l);

                l.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        try{

                            if(cp.getFlashMode().equals(OFF))
                            {
                                lamp(mode);
                            }

                            else if(cp.getFlashMode().equals(TORCH) || cp.getFlashMode().equals(ON))
                            {
                                lamp(mode);
                            }
                        }

                        catch(Exception e){
                            Log.e("STACKTRACE:", Log.getStackTraceString(e));
                        }
                    }
                });

                a.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                         if(camera == null){
                                lamp(mode);
                                }

                             else{
                                lamp(mode);
                                }
                    }
                });
        }
    }

    public void lamp(boolean mode){

        if(!mode){

            if(flag){ 
                camera = Camera.open();
                cp = camera.getParameters();
            }
             playSound(mode);
             cp.setFlashMode(Parameters.FLASH_MODE_TORCH);
             camera.setParameters(cp);
             l.setImageResource(R.drawable.on);
             this.mode = true;
        }

        else if(mode){

             playSound(mode);
             cp.setFlashMode(Parameters.FLASH_MODE_OFF);
             camera.setParameters(cp);
             camera.release();
             camera = null;
             flag = true;
             l.setImageResource(R.drawable.off);
             this.mode = false;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

当您锁定手机时,您的活动会进入onPause()状态。所以你可以使用后台服务来尝试它。

单击开始按钮启动服务并将整个代码放在后台服务中。只需单击停止按钮即可停止服务。它是一个普遍的想法,即使你的手机锁定,服务也会运行。

您可以看到此链接以了解服务的运作方式。它就像没有UI的Android Activity并在后台运行。 HERE IT IS