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

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

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

Моя основная деятельность запускает фоновый поток через 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 не дожидаясь камеры, чтобы сделать снимок.

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);
        }
    });
Другие вопросы по тегам