2012-11-22 29 views
6

Tôi đã phát triển ứng dụng Máy ảnh trong Android. Nó chụp ảnh bằng cách sử dụng một giao diện bề mặt. Dưới đây là mã mà tôi đã sử dụng để mở máy ảnhMở Máy ảnh trong máy tính bảng Nexus 7

try { 
      // attempt to get a Front Camera instance 
      c = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      System.out 
        .println("fail to connect to Front Camera"); 
     } 
     if (c == null) { 
      try { 
       // attempt to get a Back Camera instance 
       c = Camera.open(1); 
      } catch (Exception e) { 
       // TODO: handle exception 
       System.out 
         .println("fail to connect to Camera with  id = 1"); 
      } 
     } 
     if (c == null) { 
      try { 
       // attempt to get a Back Camera instance 
       c = Camera.open(0); 
      } catch (Exception e) { 
       // TODO: handle exception 
       System.out 
         .println("fail to connect to Camera with  id = 0"); 
      } 
     } 
     if (c == null) { 
      try { 
       // attempt to get a Back Camera instance 
       c = Camera.open(); 
      } catch (Exception e) { 
       // TODO: handle exception 
       System.out 
         .println("fail to connect to Back Camera"); 
       return c; 
      } 

Trường hợp c là đối tượng của Máy ảnh.

Tính năng này hoạt động tốt trên các điện thoại khác ngoại trừ Nexus 7 Tablet. Trong Nexus 7, mã ném ngoại lệ trong tất cả các trường hợp ngoại trừ mã cuối cùng, ví dụ: c = Camera.open();, nhưng đối tượng vẫn là cnull.

Đây là 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) 

Vì vậy, tôi không thể sử dụng nó để chụp ảnh. Bất kỳ giải pháp nào ???

Thanks ...

+0

Thông báo của ngoại lệ là gì? – fiddler

+0

Tôi nhận được một NullPointerException khi tôi cố gắng sử dụng đối tượng này để chụp ảnh. –

+1

@ AnujMathur_07 bạn có thể vui lòng đăng toàn bộ dấu vết/thông báo ngoại lệ không? – dumbfingers

Trả lời

6

Khi sử dụng đoạn mã sau trên Nexus 7: int cameraId = CameraInfo.CAMERA_FACING_FRONT; CameraId là 1, tuy nhiên, như bạn đã thấy, sử dụng 1 khi tham số dẫn đến lỗi. Tôi thấy rằng việc sử dụng 0 thay vì 1 hoạt động nhưng máy ảnh phải được phát hành sau mỗi lần sử dụng nên tôi tiếp tục và gọi đến Camera.open (cameraId) .release(); Tôi nhận ra điều này là xấu xí nhưng có vẻ như để giải quyết vấn đề này với 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

so sánh với nguyên thủy được thực hiện thông qua một đôi bằng nhau (==) không phải là một bằng nhau (=) – JoxTraex

+0

Liệu giải pháp này làm việc ?? Nếu có, vui lòng chấp nhận nó như CORRECT –

+0

Mã này hoạt động hoàn hảo cho Máy tính bảng Nexus 7 2013 của tôi. –

3

Một hơi muộn, nhưng có lẽ nó sẽ giúp một ai đó. Tôi gặp sự cố tương tự và KHÔNG thể tải máy ảnh Nexus 7 hoạt động với bất kỳ chỉ mục nào được cung cấp cho getCamera (idx).

Tôi đã cài đặt ứng dụng máy ảnh "Kamera Nexus 7" từ cửa hàng playstore. Tôi không có bất kỳ ứng dụng máy ảnh nào sau khi đặt lại/cập nhật. Ứng dụng này hoạt động và sau khi tôi sử dụng nó một lần, tôi có thể lấy cam bằng cách sử dụng Camera.getCamera (0);

Vì vậy, có thể có thêm "yêu cầu mở khóa" không được đề cập trong câu trả lời ở đây? (Họ không làm việc cho tôi, trước khi cài đặt ứng dụng)

+1

Cảm ơn câu trả lời, có thể nó giúp ai đó. –

Các vấn đề liên quan