2013-03-05 46 views
1

我想在我的应用程序中安排短信。我设置时间通过TimePicker & Date到DatePicker。但不知何故代码将无法工作。请告诉我哪里出错了。牛逼如何在android中安排短信?

主要代码:

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新手。

回答

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

此代码将设置将触发您的广播接收器的报警。现在在你的接收器的接收功能上打电话给你的服务。

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

} 
+0

我还是有点困惑,那么我该如何重构我的代码呢? – Saturnian 2013-03-05 09:51:59

+0

好的我在编辑我的答案 – 2013-03-05 09:55:15

+1

替换您使用此代码发布的代码,并且还记得将收件人添加到您的清单文件 – 2013-03-05 10:02:53

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