0

SMS スケジューラ アプリケーションを作成し、複数のスケジューリング機能を追加しようとしています。私が行ったことは、ユーザーがボタン (という名前scheduleSMSButton) をクリックすると、コードがデータ、つまり電話番号、テキスト、SMS が送信される時刻を収集することです。この後、コードは内部クラスのオブジェクトを作成し、上記のデータを呼び出しコンストラクターに追加してから、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で SMS をスケジュールし、19: 02 時間にテキストxyzで別のアラームをスケジュールする場合です。その後、19:00 にテキスト xyz を含む SMS が送信されます。そして、他のSMSはまったく送信されません。

このバグを修正するにはどうすればよいですか?

ありがとう。

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 に答える