我正在制作应用程序打开/关闭手机的LED我能理解我做错了什么我得到了这个错误
E/AndroidRuntime: FATAL EXCEPTION: Thread-42530
java.lang.RuntimeException: Method called after release()
at android.hardware.Camera.startPreview(Native Method)
at com.mashi.flashlight.FlashLightCallingService.flashOn(FlashLightCallingService.java:104)
at com.mashi.flashlight.FlashLightCallingService$1.run(FlashLightCallingService.java:45)
at java.lang.Thread.run(Thread.java:856)
我的代码是
public class FlashLightCallingService extends Service {
Boolean hasFlash;
Boolean isFlashOn=true ;
Camera camera;
Camera.Parameters parameters;
@Override
public void onCreate() {
hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
getCamera();
if (hasFlash)
{
new Thread(new Runnable(){
public void run() {
// TODO Auto-generated method stub
while(isFlashOn)
{
flashOn();
//flashOff();
}
}
}).start();
}
else
{
System.exit(1);
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
isFlashOn=false;
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
}
public void getCamera(){
if (camera==null)
{
try {
camera=Camera.open();
parameters=camera.getParameters();
}catch (Exception e)
{
e.printStackTrace();
}
}
}
public void flashOn(){
parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
}
public void flashOff(){
parameters = camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
}
}
对不起语言但英语不是我的语言
答案 0 :(得分:0)
你有一个线程在服务被销毁后继续运行。在服务完成onDestroy()回调之后,线程正在调用相机对象上的方法。
至少你应该确保你的线程在服务被销毁时停止,并且在它被释放后它不能再调用相机上的方法。
此外,您永远不应该有理由在Android应用中执行此操作:
System.exit(1);