У меня возникла проблема, когда использование намерения захватить изображение вызывает проблемы с памятью, когда вы нажимаете «отменить» вместо «хорошо» после того, как снимок сделан. При нажатии на отмену или обратно он не возвращает ActivityResult. Скорее всего, он просто сохраняет изображение в кеше и перезапускает активность камеры. Проблема заключается в том, что на третьем или четвертом снимке оно вызывает сбой приложения и поскольку оно не возвращает результат активности, я не знаю, как справиться с утечкой памяти.Утечка памяти камеры, отсутствие активности Результат
Я использую этот код, чтобы начать намерение в настоящее время.
static Uri m_CapturedImageURI;
void TakePhoto()
{
try
{
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
m_CapturedImageURI = getContentResolver().insert
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, m_CapturedImageURI);
startActivityForResult(takePictureIntent, 1);
}
catch (Exception e) { Log.d("Exception:", e.toString()); e.printStackTrace(); }
}
Но я также попробовал этот код, сразу раздел разработчиков андроида здесь: http://developer.android.com/training/camera/photobasics.html
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
Даже это, копировать и вставлять, производит те же самые проблемы не возврата в результате деятельности и в конце концов падает после 3-4 снимков.
Может ли кто-нибудь указать мне правильное направление?
дублированный вопрос http://stackoverflow.com/questions/32782632/java-lang-outofmemoryerror-failed-to-allocate-a-31961100-byte-allocation-with-1/32783082#32783082 –
Это не дубликат этого вопроса. Это касается изменения размера растрового изображения. Прочитайте вопрос, он не возвращает результат активности и, следовательно, не собирает растровое изображение. – Eidenai
Все, что вам нужно сделать, - когда пользователь нажимает на кнопку камеры в это время, прежде чем открывать камеру, просто проверьте место для памяти и выполните соответствующее действие. –