【问题标题】:android startActivityForResult from background thread来自后台线程的android startActivityForResult
【发布时间】:2015-12-18 05:16:25
【问题描述】:

这个问题源于我的问题没有答案: 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) 未注释,相机在前台启动,但是,在我调用 startActivityForResult 后立即调用主活动 onActivityResult 而无需等待相机拍照。

【问题讨论】:

    标签: android multithreading 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);
            }
        });
    

    【讨论】:

    • 已经为其他意图尝试过,现在为 MediaStore.ACTION_IMAGE_CAPTURE 尝试过 - 屏幕上看不到相机。
    • 你现在有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多