android startActivityForResult из фонового потока

Этот вопрос возник из-за отсутствия ответов на мой вопрос: запуск активности Android из фонового потока

Из моих усилий по этой проблеме я теперь думаю, что фоновый поток не может выполнить startActivityForResult для пользовательского ввода и получить результаты (например, с помощью onActivityResult). Пожалуйста, подтвердите, что в настоящее время это невозможно с помощью известных средств или советов по обходному пути (или версии Android, где это работает, я пробовал на 4x). Подробная информация о вариантах, которые я исследовал ниже:

Моя основная деятельность запускает фоновый поток через timertask, а затем перемещается в фоновый режим пользователем, запускающим другие приложения. Затем фоновый поток timertask пытается, например:

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        //takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        //startActivity(takePictureIntent);
    }

Если код указан выше с комментарием setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), камера запускается в фоновом режиме на уровне основного стека действий. Если setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) не закомментирован, камера запускается на переднем плане, однако в основной активности onActivityResult вызывается сразу после того, как я вызываю startActivityForResult, не дожидаясь, пока камера сделает снимок.


person Alexei Martianov    schedule 18.12.2015    source источник


Ответы (1)


Попробуйте использовать runOnUiThread для выполнения вашего кода в основном потоке:

runOnUiThread(new Runnable() {
        @Override
        public void run() {
           Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    });
person Jas    schedule 18.12.2015
comment
пробовал это уже для других целей, пробовал прямо сейчас для MediaStore.ACTION_IMAGE_CAPTURE - камера не видна на экране. - person Alexei Martianov; 18.12.2015
comment
В чем твоя проблема сейчас? - person Jas; 18.12.2015