изображение с камеры Android, возвращаемое с ошибкой, предоставляющей результат ResultInfo - PullRequest
6 голосов
/ 31 августа 2011

Я сделал приложение с двумя кнопками

  • один, чтобы выбрать изображение из галереи
  • один, чтобы сделать новое изображение с камерой

Процесс выбора галереи работает нормально, если я делаю снимок с камеры, он продолжает выдавать ошибку Failure delivering result ResultInfo. И, похоже, изображение не записывается в папку.

Поскольку оба возвращают одно и то же, у меня есть один обработчик для обработки результата;

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

Обработчики кнопок;

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

То, что я пытался:

  • Я дважды проверил манифест разрешений на запись на SD-карту
  • странно, обработчик должен быть правильным, потому что картинка из галереи работает нормально
  • В некоторых версиях андроида есть ошибка с этим обработчиком камеры, но я проверю, мой Nexus S не является одним из них.
  • гуглил / отлаживал часами

выход 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

Ответы [ 2 ]

1 голос
/ 30 мая 2013

EDIT

Первоначально я думал, что очистка моего приложения на моем телефоне и его повторная установка устранили проблему. Оказывается, это был не тот случай. Я обнаружил, что существует проблема, при которой приложение PhoneGap удаляется с помощью Android Garbage Collection при попытке получить изображение с камеры. После долгих поисков решения, в котором я остановился, я использовал плагин для переднего плана камеры . Этот плагин создает собственную камеру внутри самого приложения, так что вам не нужно беспокоиться о том, что сборщик мусора поднимет его.

К сожалению, он не полностью доступен, и большинство параметров камеры недоступны для пользователя. Он также поддерживает только Cordova 2.4.0, что означает, что мне пришлось понизить версию с 2.7.0. Это решение будет работать для моего текущего приложения, надеюсь, к следующему, которое я напишу, будет лучшее решение. Надеюсь, это поможет кому-то!

1 голос
/ 23 ноября 2011

Я только что помог человеку с такой же ошибкой в ​​списке проблем PhoneGap. Я полагаю, вам не хватает разрешения:

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

из вашего файла AndroidManifest.xml. Нам нужно уметь записывать захваченное изображение в файл .jpg.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...