2015-06-19 3 views
0

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

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Log.i("inside on create ", "inside on create "); 

    capturePhotoForRecordUpload(); 
} 

public void capturePhotoForRecordUpload() { 

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 

     File storageDir = new File(Environment.getExternalStorageDirectory().getPath() + "/MyApp"); 
     if(!storageDir.exists()) 
      storageDir.mkdirs(); 
     if(!storageDir.exists()) 
      storageDir.mkdir(); 

      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath() + "/MyApp"+"/sample.jpg"))); 
      startActivityForResult(takePictureIntent, 7); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
    } 

} 
} 

У меня возникла проблема в приведенном выше коде. Когда я начинаю свою деятельность, он открывает мою камеру. Но когда я нажимаю кнопку «Назад», она снова появляется, чтобы создать мою активность и снова открыть приложение для камеры. Это правильное поведение, или я делаю что-то неправильно? не призывая к уничтожению моей деятельности, он снова приходит внутрь на создание. Нужна помощь. Спасибо.

+0

Значения Необходимо закрыть приложение при нажатии кнопки «Назад»? –

+0

Да, либо закрытие, либо предыдущее действие. Но что случилось, я открываю камеру внутри для создания активности. Поэтому, когда я нажимаю на кнопку «Назад» с камеры, она переходит к активности выше. Он снова собирается вступить в эту деятельность и снова открыть камеру. – nilkash

+0

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

ответ

1

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

Однако я подозреваю, что все будет работать лучше, если вы это сделаете позже, возможно, в onResume().

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

+0

Да, это правда, но я беспокоюсь, почему он снова начинает свою деятельность от создания? – nilkash

+1

Возможно, потому что вы отправляете намерение до завершения завершения. Но Android всегда может убить вашу активность, пока она находится в фоновом режиме (которая находится во время работы приложения для камеры), а затем снова создайте ее, когда вы перейдете на передний план. Вот как это работает. – GreyBeardedGeek

+0

Но если это так, то в этом случае также следует вызвать onDestroy. Но это не так. И если я поставил открытый вызов камеры внутри onresume, тогда он откроет камеру на каждом из них. – nilkash

3

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

Эта проблема возникла на устройствах с низкой памятью (для меня это был более старый телефон LG, в котором было установлено 50 приложений, многие из которых выполняли различные фоновые службы, которые мы использовали для тестирования) ->приложение для камеры - это память и, таким образом, система убьет процесс в фоновом режиме, который запустил его. Вот почему вы снова видите свою деятельность в своем полном жизненном цикле.

Edit 1:

Взгляните на следующие ответы:

Android: Activity getting Destroyed after calling Camera Intent

Trouble working with the camera in onActivityResult

Activity gets killed after returned from the camera


Для некоторых людей решение было получено с помощью явных изменений (см. Первую ссылку)

Я реализовал решения, описанные в других ответах, которые обрабатывали пакет savedInstanceState, поскольку я уже контролировал путь изображения вручную.

Также вы увидите еще одну причину, по которой активность будет воссоздана, поскольку некоторые приложения на некоторых телефонах инициируют изменения ориентации. Это может быть и ваша проблема, если это не проблема памяти.

+0

Благодарим вас за быстрый повтор. Это не призыв к уничтожению. Что вы сделали в своем случае. Нужна помощь. – nilkash

+0

И это даже не согласовано. – nilkash

+0

Отредактированный ответ, посмотрите, поможет ли он. – JanBo