0

我已经创建了一个 SMS Scheduler 应用程序,现在我正在尝试向它添加多个调度功能。我所做的是,一旦用户单击一个按钮(名为scheduleSMSButton),代码就会收集数据,即电话号码、文本和发送短信的时间。在此之后,代码创建一个内部类的对象,将上述数据添加到调用构造函数,然后启动该schedule方法。

这是 scheduleSMSButton 的代码:

scheduleSMSButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {

     //getting the time.
                long difference = targetCal.getTimeInMillis();
     //getting the text.
                String smsData = smsText.getText().toString();
    //getting the phone number.
                String smsAddressee = addressee.getText().toString(); 
    //new object of inner class and start schedule method on that object.       
                new SchedulingInProgress(difference, smsData, smsAddressee).schedule();

}});

这是我创建的内部类:

private class SchedulingInProgress{

        long timeToTrigger;
        String data;
        String addressee;

        public SchedulingInProgress(long difference, String smsData,
                String smsAddressee) {
            timeToTrigger = difference;
            data = smsData;
            addressee = smsAddressee;
            // TODO Auto-generated constructor stub
        }

        private void schedule(){
            Intent fireSendSMSClass = new Intent(getApplicationContext(), 
                        SendSMS.class);
                fireSendSMSClass.putExtra("smsData", data);
                fireSendSMSClass.putExtra("smsAddressee", addressee);

            PendingIntent pdi = PendingIntent.getActivity(getApplicationContext(),
                           0, fireSendSMSClass, PendingIntent.FLAG_ONE_SHOT);

            AlarmManager newManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            newManager.set(AlarmManager.RTC_WAKEUP, timeToTrigger, pdi);
        }

    }

SendSMSClass 什么都不做,只是发送消息。

我面临的问题是,如果我在时间安排短信,例如在19:00 时使用文本abc,在时间19:02 时使用文本xyz另一个警报;然后在 19:00 时,发送带有文本 xyz 的短信。而其他短信根本不发送。

我应该怎么做才能修复这个错误?

谢谢。

4

1 回答 1

0

好的,我发现了错误。问题是我PendingIntent一次又一次地使用相同的,即我使用相同的requestCode(定义值为0)。诀窍是每次PendingIntent实例化时使用不同的值。我每次都使用此代码获取一个新值:

int requestCode = (int)System.currentTimeMillis();

然后像这样调用schedule方法(我改变了内部类的构造函数):

new SchedulingInProgress(difference, smsData, smsAddressee, requestCode).schedule();

最后,这个SchedulingInProgress类看起来像这样:

private class SchedulingInProgress{

        long timeToTrigger;
        String data;
        String addressee;
        int code;

        public SchedulingInProgress(long difference, String smsData,
                String smsAddressee, int requestCode) {
            timeToTrigger = difference;
            data = smsData;
            addressee = smsAddressee;
            code = requestCode;
            // TODO Auto-generated constructor stub
        }

        private void schedule(){
            Intent fireSendSMSClass = new Intent(getApplicationContext(), SendSMS.class);
            fireSendSMSClass.putExtra("smsData", data);
            fireSendSMSClass.putExtra("smsAddressee", addressee);


            PendingIntent pdi = PendingIntent.getActivity(getApplicationContext(), code, fireSendSMSClass, 
                    PendingIntent.FLAG_ONE_SHOT);

            newManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            newManager.set(AlarmManager.RTC_WAKEUP, timeToTrigger, pdi);
        }

    }
于 2013-04-03T12:44:30.377 回答