2014-04-27 89 views
0

我的应用程序是一个简单的火炬,它工作正常,但当手机关闭闪光灯也关闭,我想打开它,直到我关掉应用程序或杀死应用程序... 那么我要问,如果它可以通过这个程序,如果被其他应用程序开启,关闭闪光灯,反之亦然...... 这里是我的代码:为什么屏幕关闭时闪光灯会关闭?

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

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

通过单击开始按钮启动服务并将您的整个代码放入后台服务。只需点击停止按钮即可停止服务。它是一种普遍的想法,即使您的手机处于锁定状态,服务也能运行。

您可以通过此链接了解服务的工作方式。它就像一个没有UI的Android活动,并且在后台运行。 HERE IT IS