2013-06-16 6 views
0

저는 교육용으로 Android APP를 만들고 있습니다. 이 APP는 서비스로 전화를 걸고 (작업이 끝나면 서비스가 중단됩니다) UI없이 사진을 찍습니다.UI가 없으면 카메라가 제대로 작동하지 않습니다.

이 APP는 내 기존 HTC Desire (뿌리)에서 잘 작동하지만 Nexus4에서는 시작하지 않습니다. 내가 뭘 잘못하고있어? 왜 certanly 휴대폰에서 작동하지만 다른 사람에서는 작동하지 않습니까?

코드 : 내 매니페스트에서

public class OIM_CameraControl extends Service 
{  

private final IBinder mBinder = new OIM_CameraControlBinder(); 
private Camera mCamera; 
private Parameters parameters; 
private TelephonyManager telephonyManager; 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    try { 

     SurfaceView sv = new SurfaceView(getApplicationContext()); 


     if(mCamera == null) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 


       Camera.CameraInfo info=new Camera.CameraInfo(); 

        for (int i=0; i < Camera.getNumberOfCameras(); i++) {     
        Camera.getCameraInfo(i, info); 

        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 

         mCamera=Camera.open(i); 
        } 
       } 
      } 
     } 

     if (mCamera == null) { 
      System.out.println("No se ha detectado ninguna camara"); 
      mCamera=Camera.open(); 
     } 


     mCamera.setPreviewDisplay(sv.getHolder()); 

     // I tried change parameters, add new parameters, delete parameters 
     // a lot of combinations,... never works in Nexus4. 
     parameters = mCamera.getParameters(); 
     parameters.setPreviewSize(720, 480); 
     parameters.setPictureSize(720, 480); 
     parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED); 
     parameters.setFlashMode(Parameters.FLASH_MODE_OFF); 
     parameters.setZoom(0); 
     parameters.set("orientation", "portrait"); 
     parameters.set("rotation",90); 
     mCamera.setParameters(parameters); 

     mCamera.startPreview(); 
     mCamera.takePicture(null, null, mCall); 

    } 
    catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 

    return START_NOT_STICKY; 

} 

private Camera.PictureCallback mCall = new Camera.PictureCallback() 
{ 
    public void onPictureTaken(byte[] data, Camera camera) 
    { 
//Do something 
    } 
}; 

//CLASES INTERNAS DE BINDER 
public class OIM_CameraControlBinder extends Binder { 
    public OIM_CameraControl getService() { 
     return OIM_CameraControl.this; 
    } 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

:

<uses-permission android:name="android.permission.CAMERA" /> 

<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-feature android:name="android.hardware.camera.flash" /> 

로그 캣 : 사전에

06-17 11:25:29.620: D/Camera(14346): app passed NULL surface 
06-17 11:25:29.650: W/System.err(14346): java.lang.RuntimeException: takePicture failed 
06-17 11:25:29.660: W/System.err(14346): at android.hardware.Camera.native_takePicture(Native Method) 
06-17 11:25:29.660: W/System.err(14346): at android.hardware.Camera.takePicture(Camera.java:1095) 
06-17 11:25:29.660: W/System.err(14346): at android.hardware.Camera.takePicture(Camera.java:1040) 
06-17 11:25:29.660: W/System.err(14346): at com.obviousdevelop.estigia.objects.implement.OIM_CameraControl.onStartCommand(OIM_CameraControl.java:57) 
06-17 11:25:29.660: W/System.err(14346): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2656) 
06-17 11:25:29.660: W/System.err(14346): at android.app.ActivityThread.access$1900(ActivityThread.java:141) 
06-17 11:25:29.660: W/System.err(14346): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331) 
06-17 11:25:29.660: W/System.err(14346): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-17 11:25:29.660: W/System.err(14346): at android.os.Looper.loop(Looper.java:137) 
06-17 11:25:29.660: W/System.err(14346): at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-17 11:25:29.660: W/System.err(14346): at java.lang.reflect.Method.invokeNative(Native Method) 
06-17 11:25:29.660: W/System.err(14346): at java.lang.reflect.Method.invoke(Method.java:511) 
06-17 11:25:29.660: W/System.err(14346): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-17 11:25:29.660: W/System.err(14346): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-17 11:25:29.660: W/System.err(14346): at dalvik.system.NativeStart.main(Native Method) 

감사합니다!

+0

합니다. – Riser

+0

게시물을 편집하고 LOGCAT을 추가했습니다. 또한 새로운 매개 변수에 동의하십시오. – Hypnotize

답변

0

사진을 찍은 후 확인하십시오. Camera.startPreview()에 다시 전화하십시오.

또한 링크를 따라 그와 당신의 코드와 일치를 확인 .. 여기에 전체 로그 캣을 넣어

http://developer.android.com/reference/android/hardware/Camera.html

+0

나는 이것을 시도했지만 아무것도 바뀌지 않았다. 로그는 TakePicture Failed와 동일하게 설명합니다. 카메라의 API를 읽었으며 모든 것이 정확하다고 생각합니다. HTC Desire에서 작동합니다 ... 어쨌든, 감사합니다! – Hypnotize

관련 문제