2011-08-31 28 views
6

Tôi đã thực hiện một ứng dụng với hai nútandroid uri hình ảnh camera quay trở lại với một thất bại mang lại kết quả ResultInfo

  • một để chọn một hình ảnh từ bộ sưu tập
  • một để có một hình ảnh mới với camera

Quy trình chọn thư viện hoạt động tốt, nếu tôi chụp ảnh bằng máy ảnh, nó sẽ bị lỗi Failure delivering result ResultInfo. Và có vẻ như hình ảnh không được viết cho thư mục.

Vì cả hai đều trả về cùng tôi có một trình xử lý để đối phó với kết quả;

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 1) { 
      if (resultCode == RESULT_OK && data.getData() != null){ 
       try { 
        Log.i("YADDA",data.getData().toString()); 
        Uri targetUri = data.getData(); 
        if (targetUri != null) { 
         //Log.i("YADDA",targetUri.toString()); 
         myImage nsi = new myImage(); 
         nsi.ThumbNail = getThumbnail(targetUri); 
         nsi.path = targetUri; 
         nsi.FileName = FileNameBase + "_" +  String.valueOf(1 + photos.size()); 
         photos.add(nsi); 
        } 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       DrawImageGallery(); 
      } 
     } 

Trình xử lý nút;

nsbu1.setOnClickListener(new Button.OnClickListener() { 
     public void onClick(View v){ 
      Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent, 1); 
     } 
    }); 

    nsbu2.setOnClickListener(new Button.OnClickListener() { 
     public void onClick(View v){ 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       // Uri myuri=Uri.fromFile(new  File(Environment.getExternalStorageDirectory().getAbsolutePath(), FileNameBase + ".jpg")); 
       Uri myuri=Uri.fromFile(new File("/mnt/sdcard/tmp/" + FileNameBase + ".jpg")); 

       Log.i("YADDA", myuri.toString()); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, myuri); 

       startActivityForResult(cameraIntent, 1); 
      } 
     }); 

Những điều tôi đã cố gắng:

  • Tôi đã hai lần kiểm tra, biểu hiện cho quyền ghi vào điều SDcard
  • lạ là, xử lý phải đúng, bởi vì một bức tranh từ các tác phẩm trưng bày phạt
  • Một số phiên bản Android có lỗi với trình xử lý máy ảnh này, nhưng tôi đã kiểm tra, Nexus S của tôi không phải là một trong số đó.
  • googled/sửa lỗi cho giờ và giờ

đầu ra Logcat;

09-01 10:02:59.085: ERROR/AndroidRuntime(1898): FATAL EXCEPTION: main 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.android.spot/com.android.spot.newsite}: java.lang.NullPointerException 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.os.Looper.loop(Looper.java:130) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at dalvik.system.NativeStart.main(Native Method) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898): Caused by: java.lang.NullPointerException 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at com.android.spot.newsite.onActivityResult(newsite.java:351) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2528) 
09-01 10:02:59.085: ERROR/AndroidRuntime(1898):  ... 11 more 
+1

http://www.softwarepassion.com/android-series-taking-photos-with-andorid-built-in-camera/ –

+0

Cảm ơn đề xuất của bạn, tôi đã thử rằng, không có kết quả, cùng một lỗi. Thnx annyways! – Lectere

+0

Bạn có thể đăng logcat có lỗi không? –

Trả lời

1

Tôi vừa giúp một người có cùng lỗi trên danh sách vấn đề PhoneGap. Tôi tin rằng bạn thiếu quyền:

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

từ tệp AndroidManifest.xml của bạn. Chúng tôi cần có khả năng ghi hình ảnh đã chụp vào tệp .jpg.

1

EDIT

Ban đầu tôi đã nghĩ rằng thanh toán bù trừ ứng dụng của tôi trên điện thoại của tôi và cài đặt lại nó đã cố định vấn đề này. Hóa ra đây không phải là trường hợp. Tôi phát hiện ra rằng có một vấn đề mà các ứng dụng PhoneGap được gỡ bỏ với Android Garbage Collection khi cố gắng lấy một hình ảnh từ máy ảnh. Sau khi tìm kiếm giờ, giải pháp mà tôi đã kết thúc bằng cách sử dụng foreground camera plugin. Plugin này tạo ra máy ảnh riêng của mình bên trong ứng dụng theo cách này mà bạn không phải lo lắng về việc thu gom rác nhặt nó lên.

Rất tiếc, tính năng này không được mô tả đầy đủ và hầu hết các tùy chọn máy ảnh đều không có sẵn cho người dùng. Nó cũng chỉ hỗ trợ Cordova 2.4.0 có nghĩa là tôi đã phải hạ cấp từ 2.7.0. Giải pháp này sẽ làm việc cho ứng dụng hiện tại của tôi, hy vọng là ứng dụng tiếp theo tôi viết sẽ có giải pháp tốt hơn. Hy vọng điều này sẽ giúp một ai đó!