设置超时并完成 ActivityforResult activity

Setting a timeout and finishing an ActivityforResult activity

我想知道是否有某种方法可以为通过 startActivityForResult 启动的 Intent 设置超时,因此当时间过去时,可以使用上述 Intent 的 activity 执行某些操作(在我的案子完成了)。

似乎没有任何直接的方法可以直接为 Intent 设置超时,但这看起来没什么好担心的,因为我想我可以在 onFinish() 中创建一个 CountDownTimer调用代码完成意图。

问题是我没有找到完成 ActivityForResult 的方法。

有什么办法吗?

好吧,我终于解决了这个问题,确实不是很难。

对于我的 INTENT_PICK 特殊情况,以下代码可有效地在 2 分钟后停止 activity:

final int RQS_PICKCONTACT = 1;

[...]
Intent intentPickContact = new Intent(Intent.ACTION_PICK, uriContact);

                        startActivityForResult(intentPickContact, RQS_PICKCONTACT);

                        mcd = new CountDownTimer(120000, 10000) {

                            public void onTick(long millisUntilFinished) {

                            }

                            public void onFinish() {
                                try
                                {
                                    finishActivity(RQS_PICKCONTACT);

                                }
                                catch (Exception ex)
                                {

                                }
                            }

                        }.start();

在我的例子中,我想限制用户执行任务的时间,所以我创建了自己的计时器 class。

public class Timer {

private static final String TAG = "Timer" ;
int timeout;
Context mContext;
boolean compleatedTask;
String timeoutKey;
CountDownTimer countDown;

public Timer(Context mContext, int timeout, String timeoutKey){

    this.timeout = timeout;
    this.mContext = mContext;
    this.timeoutKey = timeoutKey;
}

public void startTimer() {


    this.countDown = new CountDownTimer(this.timeout, 1000) {

        public void onTick(long millisUntilFinished) {

            Log.i(TAG, "OnTick, context: " + mContext + ", milisUntilFinished: " + millisUntilFinished + ", compleatedTask: " + compleatedTask);

            if(compleatedTask)
                cancel();
        }

        public void onFinish() {

            Log.i(TAG, "OnFinish, context: " + mContext  + ", compleatedTask: " + compleatedTask);

            try
            {
                if(!compleatedTask){

                    Intent intent = new Intent(mContext, UnsuccessfullPosTaskActivity.class);
                    intent.putExtra("error", StateMachine.databaseAccess.getDictionaryTranslation(timeoutKey, StateMachine.language));
                    mContext.startActivity(intent);
                }

            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
        }

    };

    countDown.start();

}

public void setCompleatedTask(boolean compleatedTask){
    this.compleatedTask = compleatedTask;

    if(compleatedTask)
        countDown.onFinish();
}

}

然后在你的 activity

int timeout = 1000;
Timer timer = new Timer(Activity.this, timeout);
timer.startTimer(); 

//do stuff

if(conditionToStop)
timer.setCompleatedTask(true);

如果您正在使用回收视图,并且希望在他们单击某个选项时停止计数器,只需将计时器对象发送到您的自定义回收视图适配器即可。