1

这个问题源于我的问题没有答案: android start activity from background thread

从我在这个问题上的努力来看,我现在认为后台线程无法为用户输入执行 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而无需等待相机拍照。

4

1 回答 1

0

尝试使用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);
        }
    });
于 2015-12-18T05:22:20.540 回答