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);
}
});