2013-06-16 2 views
0

Je fais à des fins éducatives, une application Android. Cette APP, appel au service (le service meurent lorsque la tâche est terminée) et prendre une photo sans interface utilisateur, et sans son.Appareil photo ne fonctionne pas correctement sans interface utilisateur

Cette application fonctionne bien dans mon ancien HTC Desire (enracinée), mais ne démarre pas dans Nexus4. Qu'est-ce que je fais mal? Pourquoi fonctionne dans certains téléphones, mais pas dans d'autres?

code:

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; 
} 

Dans mon manifeste:

<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" /> 

LogCat:

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) 

Merci à l'avance!

+0

logcat tout mettre ici. – Riser

+0

Je modifie le message et ajouté le LOGCAT. Convenez également de nouveaux paramètres. – Hypnotize

Répondre

0

Vérifiez, avez-vous appeler Camera.startPreview() à nouveau après avoir pris une photo.

Suivez également le lien et vérifiez votre code et correspondance avec ce ..

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

+0

J'ai essayé, mais rien ne change. Les journaux explique la même chose, TakePicture a échoué. J'ai lu l'API de la caméra et il semble que tout est correct, aussi, sur mon HTC Desire ça marche ... Quoi qu'il en soit, merci Segi! – Hypnotize

Questions connexes