我有以下问题......我正在我的Android应用程序中实现一个QR code
游戏...这是通过启动此intent
来完成的:
Intent intent = new Intent(
"com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
换句话说,我启动了Barcode Scanner
应用程序。
我想要启动此应用程序,即使用户开始扫描条形码,应用程序也会在两分钟后自动关闭。
当然,如果用户没有平均时间。
我尝试实现这样的AsyncTask
线程:
在onCreate()之外 在onCreate()之外 问题是应用程序被打开但是在2分钟后它没有自动关闭。
有人知道我怎么能做到这一点?initTask=new InitTask();
initTask.execute();
private class InitTask extends AsyncTask<Void,Void,Void>{
protected Void doInBackground(Void...unused){
new Runnable() {
@Override
public void run() {
try {
Thread.sleep(20000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent(
"com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
}.run();
this.cancel(true);
return null;
}
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
//..........
}
答案 0 :(得分:1)
<强>更新强>
private class InitTask extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute()
{
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 1515);
}
protected Void doInBackground(Void...unused){
try
{
Thread.sleep(20000);
}
catch(Exception e)
{
System.out.println(e);
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
finishActivity(1515);
}
}
活动结果
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1515) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
System.out.println("it is ok");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
System.out.println("it is cancel");
}
}
}
答案 1 :(得分:0)
我认为这里有很多问题。
cancel()不会强制阻止任务在执行过程中执行。如果它还没有,它会阻止它运行。
即使它确实如此,也不会做你想要的。您的runnable启动一个完全不同的Activity并立即返回。它不阻止或等待。它已经在2分钟后完成。
即使没有 - 中断此调用对其他Activity也没有影响。您可以强制关闭另一个活动(好吧,不是没有平台的某些许可)。
你的超时不是2分钟,而是20秒。