java - Android Activity 力不定期关闭?

标签 java android exception

我的 Android Activity 力量不定期关闭。它要做的就是打开 LED 手电筒。这是来自 logcat 的错误:

D/CameraService(   70): CameraService::connect E (pid 4598, id 0)
I/CameraService(   70): cameraId:0
I/CameraService(   70): 2D mode only
W/CameraService(   70): CameraService::connect X (pid 4598) rejected (existing client).
D/AndroidRuntime( 4598): Shutting down VM
W/dalvikvm( 4598): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
E/AndroidRuntime( 4598): FATAL EXCEPTION: main
E/AndroidRuntime( 4598): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cakemansapps.lightwriter/com.cakemansapps.lightwriter.LightWriter}: java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime( 4598):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1821)
E/AndroidRuntime( 4598):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
E/AndroidRuntime( 4598):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3288)
E/AndroidRuntime( 4598):    at android.app.ActivityThread.access$1600(ActivityThread.java:132)
E/AndroidRuntime( 4598):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1042)
E/AndroidRuntime( 4598):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 4598):    at android.os.Looper.loop(Looper.java:143)
E/AndroidRuntime( 4598):    at android.app.ActivityThread.main(ActivityThread.java:4263)
E/AndroidRuntime( 4598):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4598):    at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 4598):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime( 4598):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime( 4598):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 4598): Caused by: java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime( 4598):    at android.hardware.Camera.native_setup(Native Method)
E/AndroidRuntime( 4598):    at android.hardware.Camera.<init>(Camera.java:265)
E/AndroidRuntime( 4598):    at android.hardware.Camera.open(Camera.java:241)
E/AndroidRuntime( 4598):    at com.cakemansapps.lightwriter.LightWriter.onCreate(LightWriter.java:21)
E/AndroidRuntime( 4598):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
E/AndroidRuntime( 4598):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
E/AndroidRuntime( 4598):    ... 12 more
W/ActivityManager(  123):   Force finishing activity com.cakemansapps.lightwriter/.LightWriter
V/AgentService_J(30842): Action[1520]:com.htc.android.iqagent.action.ui03
I/HTC_SUBMITTER_C(30842): (-3) submitUI03:0,22,0,java.lang.RuntimeException: Fail to connect to camera service
V/AgentService_J(30842): (-3)ErrorCode:0,AppType:22,Level:0,Message:java.lang.RuntimeException: Fail to connect to camera service

这是我的 Activity 。没有其他类。

package com.cakemansapps.lightwriter;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.view.KeyEvent;

public class LightWriter extends Activity implements OnTouchListener {
   private static final String TAG = "Touch" ;
   private Camera mCamera;
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      FrameLayout main = (FrameLayout) findViewById(R.id.main_view);
      mCamera = Camera.open();
   }

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int action = event.getAction();
    int keyCode = event.getKeyCode();
        switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            if (action == KeyEvent.ACTION_DOWN) {
                Log.w("LightWriter", "Down");
                setFlashlight(true);
            }
            else if (action == KeyEvent.ACTION_UP) {
                Log.w("LightWriter", "Up");
                setFlashlight(false);
            }
            return true;
        default:
            return super.dispatchKeyEvent(event);
        }
    }
/***
 * Attempts to set camera flash torch/flashlight mode on/off
 * @param isOn true = on, false = off
 * @return boolean whether or not we were able to set it
 */

public boolean setFlashlight(boolean isOn)
{
    if (mCamera == null)
    {
        return false;
    }
    Camera.Parameters params = mCamera.getParameters();
    String value;
    if (isOn) // we are being ask to turn it on
    {
        value = Camera.Parameters.FLASH_MODE_TORCH;
    }
    else  // we are being asked to turn it off
    {
        value =  Camera.Parameters.FLASH_MODE_OFF;
    }

    try{    
        params.setFlashMode(value);
        mCamera.setParameters(params);

        String nowMode = mCamera.getParameters().getFlashMode();

        if (isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_TORCH))
        {
            return true;
        }
        if (! isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_AUTO))
        {
            return true;
        }
        return false;
    }
    catch (Exception ex)
    {
    }
    return false;
}
    public boolean onTouch(View view, MotionEvent me) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
@Override
public void onBackPressed() {
    mCamera.release();
    this.finish();
    return;
   }
}

我做错了什么?

最佳答案

不要将相机服务连接保存在字段中。相反,当您要使用该服务时调用 open ,并在使用完毕后调用 release 。

关于java - Android Activity 力不定期关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180834/

相关文章:

Android抽屉导航设置可点击区域只列出项目

java.lang.UnsupportedClassVersionError : com/android/build/gradle/AppPlugin : Unsupported major. 次要版本 52.0

ios - 对 iOS 上的 Google Places API 的请求返回 REQUEST_DENIED

java - 扩展 vert.x 中的工作池

java - 读取 Swift Message Prowide (WIFE) 后关闭 fileInputStream

java - 如何在没有堆错误的情况下将大型 java 对象编码为 xml?

Android/Linux 线程加入超时

c++ - 编写 "anti-lack of memory"异常安全代码

c++ - 实现这个 "on error, throw"回调的最佳方式是什么?

java - 数组列表中的随机单词