如何在android中安排短信?

时间:2013-03-05 09:36:18

标签: android sms datepicker timepicker android-calendar

我正在尝试在我的应用中安排短信。我正在通过TimePicker&通过DatePicker的日期。但不知何故,代码将无法正常工作。请告诉我我哪里出错了。 Ť

主要代码:

    int Hour = Time_Picker.getCurrentHour();
                    int Minute = Time_Picker.getCurrentMinute();

                DatePicker Date_Picker = (DatePicker)findViewById(R.id.datePicker1);
                int day = Date_Picker.getDayOfMonth();
                 int month = Date_Picker.getMonth() + 1;
                 int year = Date_Picker.getYear();


                Intent myIntent = new Intent(ScheduleMessage.this, MyAlarmService.class);

                Bundle bundle = new Bundle();
                         bundle.putCharSequence("Number", Number.getText().toString());
                         bundle.putCharSequence("Message", Message.getText().toString());
                         myIntent.putExtras(bundle);

                pendingIntent = PendingIntent.getService(ScheduleMessage.this, 0, myIntent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

                 Calendar calendar = Calendar.getInstance();
                 calendar.setTimeInMillis(System.currentTimeMillis());
                 //calendar.add(Calendar.SECOND, 10);
                 calendar.set(year, month, day, Hour, Minute);

                 alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

                         Toast.makeText(ScheduleMessage.this,"Start Alarm with \n" + 
                         "smsNumber = " + Number.getText().toString() + 
                         "\n" + "smsText = " + Message.getText().toString() + "\nScheduled for :"
                         + Hour +" "+Minute,
                           Toast.LENGTH_LONG).show();


`

这是服务:

public class MyAlarmService extends Service {
    String smsNumberToSend, smsTextToSend;

     @Override
     public void onCreate() {
      // TODO Auto-generated method stub

      Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
     }


     @Override
     public void onDestroy() {
      // TODO Auto-generated method stub
       super.onDestroy();
       Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
     }

     @Override
     public void onStart(Intent intent, int startId) {

         Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();
      // TODO Auto-generated method stub
      //super.onStart(intent, startId);

      Bundle bundle = intent.getExtras();
           smsNumberToSend = (String) bundle.getCharSequence("Number");
           smsTextToSend = (String) bundle.getCharSequence("Message");

      Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();
      Toast.makeText(this,
             "MyAlarmService.onStart() with \n" +
             "smsNumberToSend = " + smsNumberToSend + "\n" +
             "smsTextToSend = " + smsTextToSend,
             Toast.LENGTH_LONG).show();

      SmsManager smsManager = SmsManager.getDefault();
      smsManager.sendTextMessage(smsNumberToSend, null, smsTextToSend, null, null);

     }
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

}

有趣的是,当我添加行calendar.set(Calendar.SECOND,10);时 - 一切正常。但是当我使用相同的方法并设定一个特定的时间时,没有任何反应。

请帮助我,我是Android新手。

2 个答案:

答案 0 :(得分:0)

您应该使用广播接收器来实现此目的,从那里就可以触发您的服务。

  int Hour = Time_Picker.getCurrentHour();
                    int Minute = Time_Picker.getCurrentMinute();

                DatePicker Date_Picker = (DatePicker)findViewById(R.id.datePicker1);
                int day = Date_Picker.getDayOfMonth();
                 int month = Date_Picker.getMonth() + 1;
                 int year = Date_Picker.getYear();


                Intent myIntent = new Intent(ScheduleMessage.this, recieve.class);

                Bundle bundle = new Bundle();
                         bundle.putCharSequence("Number", Number.getText().toString());
                         bundle.putCharSequence("Message", Message.getText().toString());
                         myIntent.putExtras(bundle);

                pendingIntent = PendingIntent.getBroadcast(ScheduleMessage.this, 0, myIntent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

                 Calendar calendar = Calendar.getInstance();
                 calendar.setTimeInMillis(System.currentTimeMillis());
                 //calendar.add(Calendar.SECOND, 10);
                 calendar.set(year, month, day, Hour, Minute);

                 alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

                         Toast.makeText(ScheduleMessage.this,"Start Alarm with \n" + 
                         "smsNumber = " + Number.getText().toString() + 
                         "\n" + "smsText = " + Message.getText().toString() + "\nScheduled for :"
                         + Hour +" "+Minute,
                           Toast.LENGTH_LONG).show();

此代码将设置触发广播接收器的警报。现在你的接收器的onRecieve功能调用你的服务。

public class mainRecieve extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

        try {

                    Intent ii=new Intent(arg0,MyAlarmService.class);
                    arg0.startService(ii);
                }               
                }
             catch (Exception e) {
                Toast.makeText(arg0, "There was an error somewhere, but we still received an alarm"+e, Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
    }

}

答案 1 :(得分:0)

问题在于您的BroadcastReceiver,您没有将捆绑包传递给服务!

public class ReceiveBroadcast extends BroadcastReceiver {

@Override
public void onReceive(Context arg0, Intent arg1) {
    // TODO Auto-generated method stub

    try {
        Intent ii = new Intent(arg0, AlarmService.class);
        Bundle bundle = arg1.getExtras();
        ii.putExtras(bundle);
        arg0.startService(ii);
    } catch (Exception e) {
        Toast.makeText(arg0, "There was an error somewhere, but we still received an alarm" + e, Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}