短信重发+异步任务

时间:2012-08-09 12:09:44

标签: android sms

我正在开发APP发送短信给号码,如果短信失败了Asynctask执行并检查间隔后再次重新发送短信但是,我所有的工作都浪费了,因为我不明白Asynctask 这里是我的代码。 /强>

ASYNC课程

        class checkList extends AsyncTask<String, Void, Void> {
        public Void doInBackground(String... p) {
          while (true) {
                already_running_async=true;
              sms.sendTextMessage(phone_nr, null, "SmS Sending", sentPI, null);

              try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
              if (isCancelled()) break;

          }
        return null;
        }
        };

短信发送代码和错误处理

        bol=false;
    already_running_async=false;
    check=false;

sms = SmsManager.getDefault();
        if(!phone_nr.equals(""))
            sms.sendTextMessage(phone_nr, null,"Sms body" , sentPI, null); 
        sendBroadcastReceiver = new BroadcastReceiver(){
         @Override
            public void onReceive(Context context, Intent intent) {
                switch (getResultCode())
                {
                   case Activity.RESULT_OK:
                       //sms sent if bol true cancel the Asynctask :)
                    if(bol){
                    new checkList().cancel(true);}
                    break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        if(already_running_async==false){
                        new checkList().execute();
                        bol=true;}
                        break;
                }

           }
        };
        registerReceiver(sendBroadcastReceiver , new IntentFilter(SENT));

问题:  任务开始但任务仍然存活并在10秒后重复发送短信我也放了取消但asyntask在成功发送短信后没有取消

由于这个问题,请帮助我没有睡觉:(

此致

1 个答案:

答案 0 :(得分:0)

这种情况会创建一个立即取消的 new asynctask。

case Activity.RESULT_OK:
    //sms sent if bol true cancel the Asynctask :)
    if(bol){
        new checkList().cancel(true);
    }
    break;

要取消AsyncTask,您需要将其存储在变量中,例如

checkList smsTask = new checkList();
smsTask.execute();

// Other app logic

// Replacing the internal portion of that case is the new cancel code
if (bol) {
    smsTask.cancel(true);
}