2016-05-31 3 views
0

Итак, у меня есть эта страница в моем приложении, которая позволяет пользователю делать снимок с помощью своей камеры или выбирать изображение из галереи.Android: сборщик фотографий и намерение камеры сбрасываются на onActivityresult

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

Сейчас здесь идет мою проблему, когда я пытаюсь получить изображение, используя либо сборщик галереи или намерение камеры, мое приложение вылетает сразу после с ошибкой:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {my.com.thelorry.ken.thelorrypartner/com.example.Activity}: 

Если я использую намерение камеры или если я использовал галереи сборщика это показывает:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.example/com.example.Activity}: 

Ниже приведены коды, которые я использовал, чтобы начать свою камеру намерения:

public void startCamera(){ 
    ContentValues values; 
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    values = new ContentValues(); 
    values.put(MediaStore.Images.Media.TITLE, "New Picture"); 
    values.put(MediaStore.Images.Media.DESCRIPTION, "From phone Camera"); 
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 

И мои коды запуска галереи подборщика:

public void pickGallery(){ 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, GALLERY_REQUEST); 
} 

Это мои коды для обработки результатов:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    photo = null; 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     try { 
      photo = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
      photo = getResizedBitmap(photo, 600, 450); 
      File file = new File(imageurl); 
      file.delete(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     createDialog(photo); 
    }if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK && data != null) { 
     Uri pickedImage = data.getData(); 
     String[] filePath = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
     cursor.moveToFirst(); 
     String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); 
     photo = getResizedBitmap(bitmap, 600, 450); 
     cursor.close(); 
     createDialog(photo); 
    } 

} 

Кроме того, достаточно странно, этот код кажется врезаться только на телефонах Samsung на основе моих отчеты о сбоях, и только на некоторых моделях, таких как Galaxy J7, Note5, Note4 (пока приложение еще не имеет огромной пользовательской базы).

Edit: После того, как на самом деле получить телефон, который может воспроизвести аварии, я понимаю, что коды выше, не может быть проблема в конце концов, это то, что я имею в logcats:

Process: com.example, PID: 6220 
                       java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.example/com.example.Activity}: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:4019) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4062) 
                        at android.app.ActivityThread.access$1400(ActivityThread.java:177) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5930) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
                       Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff 
                        at android.content.res.Resources.getValue(Resources.java:1542) 
                        at android.support.v7.widget.ResourcesWrapper.getValue(ResourcesWrapper.java:204) 
                        at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:321) 
                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197) 
                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192) 
                        at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66) 
                        at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71) 
                        at com.android.internal.app.AlertController.setupTitle(AlertController.java:565) 
                        at com.android.internal.app.AlertController.setupView(AlertController.java:474) 
                        at com.android.internal.app.AlertController.installContent(AlertController.java:240) 
                        at android.app.AlertDialog.onCreate(AlertDialog.java:356) 
                        at android.app.Dialog.dispatchOnCreate(Dialog.java:373) 
                        at android.app.Dialog.show(Dialog.java:274) 
                        at com.example.Activity.createDialog(Activity.java:697) 
                        at com.example.Activity.onActivityResult(Activity.java:618) 
                        at android.app.Activity.dispatchActivityResult(Activity.java:6441) 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:4015) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4062)  
                        at android.app.ActivityThread.access$1400(ActivityThread.java:177)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5930)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)  

также:

FATAL EXCEPTION: main 
                       Process: com.example, PID: 9794 
                       java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1889, result=-1, data=Intent { dat=content://media/external/images/media/3196 flg=0x1 (has extras) }} to activity {com.example/com.example.Activity}: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:4019) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4062) 
                        at android.app.ActivityThread.access$1400(ActivityThread.java:177) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5930) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
                       Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff 
                        at android.content.res.Resources.getValue(Resources.java:1542) 
                        at android.support.v7.widget.ResourcesWrapper.getValue(ResourcesWrapper.java:204) 
                        at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:321) 
                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197) 
                        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192) 
                        at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66) 
                        at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71) 
                        at com.android.internal.app.AlertController.setupTitle(AlertController.java:565) 
                        at com.android.internal.app.AlertController.setupView(AlertController.java:474) 
                        at com.android.internal.app.AlertController.installContent(AlertController.java:240) 
                        at android.app.AlertDialog.onCreate(AlertDialog.java:356) 
                        at android.app.Dialog.dispatchOnCreate(Dialog.java:373) 
                        at android.app.Dialog.show(Dialog.java:274) 
                        at com.example.Activity.createDialog(Activity.java:697) 
                        at com.example.Activity.onActivityResult(Activity.java:639) 
                        at android.app.Activity.dispatchActivityResult(Activity.java:6441) 
                        at android.app.ActivityThread.deliverResults(ActivityThread.java:4015) 
                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4062)  
                        at android.app.ActivityThread.access$1400(ActivityThread.java:177)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5930)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)  

Дополнительная информация, это моя функция createDialog, которая фактически вызывает проблемы.

Drawable icon = new BitmapDrawable(this.getResources(),photo); 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle(getString(R.string.business_post_camera_dialog_title)) 
       .setMessage(getString(R.string.business_post_camera_dialog_message)) 
       .setCancelable(false) 
       .setPositiveButton(R.string.sign_confirm_btn, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         doSomething(); 
        } 
       }) 
       .setNegativeButton(R.string.sign_cancel_btn, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // do nothing 
        } 
       }) 
       .setIcon(-1).setIcon(icon); //setIcon(-1) as a workaround for bug in Android Lollipop 5.0 
     AlertDialog alert = builder.create(); 
     alert.show(); 

Видимо .setIcon (-1) вызывает сбой на телефонах Samsung, но без него я не смог бы показать мои изображения там на некоторых телефонах еще на Lollipop 5.0, любое решение?

+0

Проблема не в коде выше, он находится в CreateDialog (фото), так покажите мне ваш метод CreateDialog(). – Vickyexpert

+0

Я включил это в свой пост, и да, вы правы, исправили проблему, но это также означает, что я должен отказаться от обходного пути, который мне нужен для телефонов с леденцом 5,0, найденных здесь: https://code.google.com/p/android/issues/detail? id = 92929, любое решение? – Ken

+0

проверить мой ответ на этот вопрос – Vickyexpert

ответ

0

Попробуйте использовать ниже метод для диалога,

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    Drawable icon = new BitmapDrawable(this.getResources(),photo); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(getString(R.string.business_post_camera_dialog_title)) 
      .setMessage(getString(R.string.business_post_camera_dialog_message)) 
      .setCancelable(false) 
      .setPositiveButton(R.string.sign_confirm_btn, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        doSomething(); 
       } 
      }) 
      .setNegativeButton(R.string.sign_cancel_btn, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // do nothing 
       } 
      }); 


     if (currentapiVersion >= android.os.Build.VERSION_CODES.LOLLIPOP){ 

      builder.setIcon(-1).setIcon(icon); 

     } else{ 
       builder.setIcon(icon); 
     } 
    AlertDialog alert = builder.create(); 
    alert.show(); 
+0

Я не пробовал это, но я уверен, что это сработает. Как я никогда не думал об этом, когда широко использовал коды версий для запуска разных кодов для разных версий Android в моем приложении. – Ken

1

Проблема здесь:

... 
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xffffffff 
... 

Вы пытаетесь использовать setImageResource(int id) с не существует изображения. Вы можете использовать его следующим образом:

imageView.setImageResource(R.drawable.image_name) 

То же самое можно использовать и для TextView.

textView.setText("" + intValue); 
+0

Да, я на самом деле понял это несколько минут назад. Я хотел установить значок, используя растровое изображение, которое по какой-то причине не работает на устройствах с lollipop 5.0, поэтому я добавил обходное решение, которое связано с добавлением setIcon (-1), который не хорошо работает с некоторыми устройствами samsung. Кажется, – Ken

+0

setIcon (-1) не будет работать с любыми устройствами AFAIK. – Ozgur

+0

Это на самом деле .setIcon (-1) .setIcon (значок); который работал на большинстве устройств, я отредактировал свой пост, чтобы включить это. – Ken