我的应用程序是一个简单的火炬,它工作正常,但当手机关闭闪光灯也关闭,我想让它打开,直到我通过应用程序关闭它或杀死应用程序... 然后我想询问是否有可能通过这个应用程序关闭闪存,如果它由另一个应用程序打开,反之亦然...... 这是我的代码:
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;
}
}
}
答案 0 :(得分:1)
当您锁定手机时,您的活动会进入onPause()状态。所以你可以使用后台服务来尝试它。
单击开始按钮启动服务并将整个代码放在后台服务中。只需单击停止按钮即可停止服务。它是一个普遍的想法,即使你的手机锁定,服务也会运行。
您可以看到此链接以了解服务的运作方式。它就像没有UI的Android Activity并在后台运行。 HERE IT IS