2016-07-15 5 views
1

Когда пользователь нажимает кнопку, приложение открывает галерею в обычном режиме. Однако, как только пользователь выбирает фотографию, приложение исчезает (сворачивается) без каких-либо ошибок или предупреждений в режиме отладки. То же самое происходит, когда я фотографирую. Точка останова, которую я имею в начале onActivityResult, никогда не достигла. Функции openGallery() и openCamera() вызывают из XML-фрагмента. Что не так?Приложение для Android исчезает после выбора фотографии из галереи

public static final int GALLERY = 0; 
public static final int CAMERA = 1; 

public void openGallery(View view) { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(galleryIntent, GALLERY); 
    } 

    public void openCamera(View view) { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, CAMERA); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 
      if (requestCode == GALLERY) 
       onSelectFromGalleryResult(data); 
      else if (requestCode == CAMERA) 
       onCaptureImageResult(data); 
     } 
    } 

private void onCaptureImageResult(Intent data) { 
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
    File destination = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); 
    FileOutputStream fo; 
    try { 
     destination.createNewFile(); 
     fo = new FileOutputStream(destination); 
     fo.write(bytes.toByteArray()); 
     fo.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

    private void onSelectFromGalleryResult(Intent data) { 
     Bitmap bm=null; 
     if (data != null) { 
      try { 
       bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

Права доступа

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

Фрагмент XML

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:onClick="openCamera" 
    android:clickable="true" 
    android:src="@drawable/camera" /> 

<ImageView 
    android:id="@+id/imageView2" 
    android:layout_marginLeft="10dp" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:onClick="openGallery" 
    android:clickable="true" 
    android:src="@drawable/gallery" /> 
+1

Убедитесь, что вы пытаетесь сделать что-то интенсивное на вашем onSelectFromGalleryResult(). Особенно, если вы пытаетесь показать захваченное изображение, подумайте об изменении размера растрового изображения. Проверьте это [link] (https://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap) для получения дополнительной информации. –

+0

Невозможно определить без вашего метода onSelectFromGalleryResult(). Пожалуйста, опубликуйте его. –

+0

Правильно ли он работает при съемке с камерой? –

ответ

2

Я решил эту проблему путем изменения: android:noHistory="true" к "false" в AndroidManifest.xml.