设置超时并完成 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);
如果您正在使用回收视图,并且希望在他们单击某个选项时停止计数器,只需将计时器对象发送到您的自定义回收视图适配器即可。
我想知道是否有某种方法可以为通过 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);
如果您正在使用回收视图,并且希望在他们单击某个选项时停止计数器,只需将计时器对象发送到您的自定义回收视图适配器即可。