这个问题源于我的问题没有答案:android从后台线程启动活动
从我在这个问题上的努力来看,我现在认为后台线程没有办法为用户输入启动ActivityForResult并获得结果(例如通过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
后立即调用,而无需等待相机拍照。
尝试使用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);
}
});