2012-11-22 5 views
6

Ich habe eine Kamera-Anwendung in Android entwickelt. Es erfasst das Bild mit einer Oberflächenansicht. Unten ist der Code, den ich zum Öffnen der Kamera verwendet habeOffene Kamera in Nexus 7 Tablet

Wo ist ein Objekt der Kamera.

Es funktioniert gut in anderen Handys außer Nexus 7 Tablet. In Nexus 7 löst der Code Ausnahme in allen Fällen außer dem letzten aus, d. H. c = Camera.open();, aber das Objekt c ist immer noch null. Hier

ist der Stack-Trace

11-22 12:36:57.559 W/System.err(7621): java.lang.NullPointerException 
11-22 12:36:57.559 W/System.err(7621): at 

com.MyPackage.OpenCamera.getFrontCameraInstance(OpenCamera.java:238) 
11-22 12:36:57.559 W/System.err(7621): at 

com.MyPackage.OpenCamera.onCreate(OpenCamera.java:123) 
11-22 12:36:57.559 W/System.err(7621): at 

android.app.Activity.performCreate(Activity.java:5104) 
11-22 12:36:57.559 W/System.err(7621): at 

android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
11-22 12:36:57.559 W/System.err(7621): at 

android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
11-22 12:36:57.559 W/System.err(7621): at 

android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
11-22 12:36:57.559 W/System.err(7621): at 

android.app.ActivityThread.access$600(ActivityThread.java:141) 
11-22 12:36:57.559 W/System.err(7621): at android.app.ActivityThread 

$H.handleMessage(ActivityThread.java:1234) 
11-22 12:36:57.559 W/System.err(7621): at 

android.os.Handler.dispatchMessage(Handler.java:99) 
11-22 12:36:57.559 W/System.err(7621): at android.os.Looper.loop 

(Looper.java:137) 
11-22 12:36:57.559 W/System.err(7621): at android.app.ActivityThread.main 

(ActivityThread.java:5039) 
11-22 12:36:57.559 W/System.err(7621): at 

java.lang.reflect.Method.invokeNative(Native Method) 
11-22 12:36:57.559 W/System.err(7621): at java.lang.reflect.Method.invoke 

(Method.java:511) 
11-22 12:36:57.559 W/System.err(7621): at 

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 

(ZygoteInit.java:793) 
11-22 12:36:57.559 W/System.err(7621): at 

com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
11-22 12:36:57.559 W/System.err(7621): at dalvik.system.NativeStart.main 

(Native Method) 
11-22 12:36:57.559 I/System.out(7621): Error in setting Parameter 
11-22 12:36:57.609 I/ActivityManager(480): Displayed 
11-22 12:36:57.679 W/System.err(7621): at 

android.location.Geocoder.getFromLocation(Geocoder.java:136) 
11-22 12:36:57.679 W/System.err(7621): at com.MyPackage.OpenCamera. 

$MyTimmer$1.run(OpenCamera.java:336) 
11-22 12:36:57.679 W/System.err(7621): java.lang.NullPointerException 
11-22 12:36:57.679 W/System.err(7621): at com.MyPackage.OpenCamera. 

$MyTimmer$1.run(OpenCamera.java:344) 

So kann ich es nicht Bild einzufangen verwenden. Irgendeine Lösung ???

Dank ...

+0

Was ist die Ausnahme der Nachricht? – fiddler

+0

Ich erhalte eine NullPointerException, wenn ich versuche, dieses Objekt zu verwenden, um Image zu erfassen. –

+1

@ AnujMathur_07 könnten Sie bitte die gesamte Stack-Trace/Exception-Nachricht veröffentlichen? – dumbfingers

Antwort

6

Wenn auf dem Nexus mit dem folgenden Code 7: int cameraId = CameraInfo.CAMERA_FACING_FRONT; Die cameraId ist jedoch 1. Wie Sie gesehen haben, führt die Verwendung von 1 als Parameter zu einem Fehler. Ich habe festgestellt, dass die Verwendung von 0 anstelle von 1 funktioniert, aber die Kamera muss nach jeder Verwendung freigegeben werden, also gehe ich vor und rufe Camera.open (cameraId) .release(); Ich weiß, das ist hässlich, aber es scheint, das Problem mit dem Nexus 7.

int cameraId = -1; 
    boolean errorFound = false; 
    boolean hasFeatCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 

    if (hasFeatCamera) { 

      try{ 
       cameraId = CameraInfo.CAMERA_FACING_BACK; 
       Camera.open(cameraId).release(); 
       }catch(Exception e){ 
        Camera.open(0).release(); 
       } 

    } else if(CameraInfo.CAMERA_FACING_FRONT>-1){ 

     try{ 
     cameraId = CameraInfo.CAMERA_FACING_FRONT; 
     Camera.open(cameraId).release(); 
     }catch(Exception e){ 
      errorFound = true; 

     } 

     if(errorFound){ 
      try{ 
       Camera.open(0).release(); // Put in for Nexus 7 as CameraInfo.CAMERA_FACING_FRONT= 1 but it only loads if the id is actually 0 
       cameraId = 0; 
      }catch(Exception e){ 
       cameraId = -1; 
      } 
     } 
    } 

    if(cameraId<0){ 
     Toast.makeText(this, "No camera found.", 
        Toast.LENGTH_LONG).show(); 
    } 
+0

Vergleich mit Primitiven erfolgt durch ein Doppel gleich (==) nicht ein einziges gleich (=) – JoxTraex

+0

Funktioniert diese Lösung? Wenn dies der Fall ist, akzeptieren Sie es bitte als CORRECT –

+0

Dieser Code funktioniert perfekt für mein Nexus 7 2013 Tablet. –

3

Ein bisschen spät, zu lösen, aber vielleicht hilft es jemand. Ich hatte genau das gleiche Problem und konnte die Nexus 7 Kamera nicht mit einem Index arbeiten, der an getCamera (idx) geliefert wurde.

Ich habe eine Kamera "Kamera Nexus 7" App aus dem Playstore installiert. Ich hatte nach einem Reset/Update keine Kamera-App. Diese App funktioniert und nachdem ich es einmal verwendet habe, konnte ich die Kamera mit Camera.getCamera (0);

Also gibt es vielleicht eine zusätzliche "Entsperrungsanforderung", die in den Antworten hier nicht behandelt wird? (Sie funktionierten nicht für mich, vor der Installation der App)

+1

Danke für die Antwort, vielleicht hilft es jemandem. –