2015-05-28 2 views
2

Я просто хочу спросить вас, что я не могу найти решение.Ошибка при андроиде приложения при открытии камеры на галактике Samsung s4 mini

У меня есть галактика samsung s4 mini, и я пытаюсь что-то сделать с камерой, а иногда она падает, но это не дает мне никакой ошибки.

Я получил этот код:

private void dispatchTakePictureIntent() { 
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
// Ensure that there's a camera activity to handle the intent 
if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
    // Create the File where the photo should go 
    File photoFile = null; 
    try { 
     photoFile = createImageFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    // Continue only if the File was successfully created 
    if (photoFile != null) { 
     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
       Uri.fromFile(photoFile)); 

     startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
    } 
} 
} 

private File createImageFile() throws IOException { 
// Create an image file name 
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
String imageFileName = "JPEG_" + timeStamp + "_"; 
String directory = "appname" + File.separator + "images"; 
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory; 
File storageDir = new File(path); 
storageDir.mkdirs(); 

File image = File.createTempFile(
    imageFileName, /* prefix */ 
    ".jpg", /* suffix */ 
    storageDir /* directory */ 
); 

// Save a file: path for use with ACTION_VIEW intents 
mCurrentPhotoPath = image.getAbsolutePath(); 
return image; 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK && mCurrentPhotoPath != null) { 

    File file = new File(mCurrentPhotoPath); 
    BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 
    Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath(), 
       btmapOptions); 

    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bm,(int)(bm.getWidth()*0.6), (int)(bm.getHeight()*0.6), true); 

    mUri = Uri.fromFile(file); 
     sendPhoto(Constants.encodeTobase64(resizedBitmap)); 
} else { 
    runOnUiThread(new Runnable() { 

@Override 
public void run() { 
Toast.makeText(mContext, "Error", Toast.LENGTH_SHORT).show(); 
} 
    }); 
    } 
} 

Иногда, когда приложение находится в методе createImageFile(), то переменная mCurrentPhotoPath всегда имеет значение, но когда приложение находится в методе onActivityResult(), иногда это значение равно NULL, а когда это не удается. Приложение просто закрывается, и у меня нет какой-либо ошибки. Это немного странно, потому что иногда это работает (я сделал 15 последовательных и 16 не удалось ..).

Самое странное, что когда я пробую это приложение в другом телефоне, он работает так ... есть какое-то решение?

Спасибо всем и простите за то, что слишком раздражает на этом ..

ответ

4

Я думаю, что вы текущая деятельность, которая вызывает намерение камеры. убиты android os из-за нехватки ресурсов. поэтому при возврате из приложения камеры. ваш текущий вид активности перезапустится. если вы хотите проверить, пожалуйста, внесите в журнал метод oncreate. для решения этой проблемы вам необходимо сохранить хранилище mCurrentPhotoPath в методе onSaveInstanceState и вернуть его на метод onCreate для получения дополнительной информации, пожалуйста, обратитесь к Google devloper site.

+0

Это означает, что действие было уничтожено тогда? Предполагается, что Lollipop будет меньше в системе, так почему это происходит сейчас? –

+0

Да @mcd является правильным. из-за озера ресурсов android уничтожит вашу деятельность и придаст памяти намерение камеры. – Moinkhan

+0

Спасибо, это работает правильно, я нашел способ исправить это – Loulisoft

0

Существует ошибка с Samsung и леденец. Это отводит активность, а не возвращается к ней с камеры.

Это должно исправить вашу проблему:

File file = new File(createImageFile()); 

запомнить Также вызвать createImageFile() перед открытием камеры, так что вы будете иметь путь к файлу, чтобы сохранить изображение в.

+1

Я не думаю, что это не ошибка, с которой я никогда не сталкиваюсь. Я думаю, что активность убита из-за открытия приложения для камеры, и ему нужны ресурсы. Ему пришлось использовать mCurrentPhotoPath для onsaveinstancestate и вывести его на oncreate(). – mcd

+0

столкнулся с огромной проблемой с приложением, которое я поддерживаю в этой же самой проблеме. Только на Samsung работает Lollipop. –

 Смежные вопросы

  • Нет связанных вопросов^_^