android - 实现 AsyncTask 线程的问题

标签 android barcode-scanner

我有以下问题...我正在我的 android 应用程序中实现一个QR 码 游戏...这是通过启动此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() 中

initTask=new InitTask();
initTask.execute();

在 onCreate() 之外

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;

       }

   }

在 onCreate() 之外

   public void onActivityResult(int requestCode, int resultCode, Intent intent) {
     //..........
    }

问题是应用程序已打开,但 2 分钟后不会自动关闭。 有人知道我怎样才能做到这一点吗?

最佳答案

更新

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);

}


}

Activity 结果

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");
                }
            }
        }

关于android - 实现 AsyncTask 线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7384339/

相关文章:

c# - Windows Phone 8 上的二维码扫描

android - 获取 4 个按钮以具有相同的 autoSize Android (Kotlin)

android - Jetpack Compose 导航结果

android - 如何判断USB是否连接到android设备?

Android——如何在动画停止后销毁对象?

android - Android 的 Zxing 条码库中缺少包 com.google.zxing

documentation - 是否有 Scandit SDK 的开发者文档?

Android:添加支付宝支付

zxing - 适用于 iOS/Android 的移动条码扫描器

javascript - 如何在IBM Worklight上实现多平台条码扫描器?