Прежде всего, я новичок в Android-разработке, поэтому, пожалуйста, будьте терпеливы со мной.
Я начну с пользовательского интерфейса. У меня есть кнопка, нажатие на которую запускает действие для получения результата.
public class GUIActivity extends Activity
@Override
public void onClick(....){
Intent intent = new Intent(getApplicationContext(), GetImageActivity.class);
intent.putExtra("action", FROM_CAMERA);
startActivityForResult(intent, GET_IMAGE);
}
@Override
onActivityResult(int requestCode, int resultCode, Intent data){
Log(TAG, "onActivityResult");
//handle result
}
}
Класс GetImageActivity
является оболочкой для двух других действий: одно для захвата изображения с камеры, а другое для получения его из галереи. Он возвращает объект Uri выбранного изображения.
public class GetImageActivity extends Activity{
private Uri mediaUri;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
int action = extras.getInt("action");
Log.d(TAG, "onCreate");
switch(action){
case FROM_CAMERA:
mediaUri = Uri.fromFile(new File(....));
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, mediaUri);
Log.d(TAG, "Calling camera activity"
startActivityForResult(intent, action);
break;
case FROM GALLERY:
//...
}
}
@Override
onActivityResult(int requestCode, int resultCode, Intent data){
Log.d(TAG, "onActivityResult");
switch(requestCode){
case FROM_CAMERA:
if(resultCode == Activity.RESULT_OK){
Intent data = new Intent();
data.putExtra("uri", mediaUri);
setResult(Activity.RESULT_OK, data);
finish();
}else{
Log.e(TAG, "Camera activity failed!");
setResult(Activity.RESULT_CANCELED);
finish();
}
break;
case FROM_GALLERY:
//...
}
}
}
Вот что должно произойти, когда пользователь нажмет кнопку:
Иногда (обычно с вероятностью 50%) все работает как положено, но иногда происходит следующее:
Я добавил пару строк журнала отладки, чтобы проследить последовательность событий.Когда я получаю плохое поведение, это вывод, который я получаю:
Камера открывается, и как только я сделал снимок, она говорит:
Камера открывается во второй раз. Пользователь делает еще один снимок и:
Итак, мой вопрос... что может привести к тому, что GetImageActivity
будет вызываться дважды?