2011-12-08 1 views
0

Эй, все вы в Stackoverflow.Android SMS - отправляет сообщение после нажатия кнопки Button.click дважды

У меня эта невероятно неприятная проблема. Я пытаюсь создать приложение SMS, которое отправит SMS в определенное время с помощью AlarmManager. И достаточно смешно (потому что это казалось трудным) отправка SMS в определенное время работает безупречно, но что острых ощущений (или убивает) меня в том, что он может только отправить SMS после того как я нажал кнопку дважды?!

У кого-то есть идея, потому что я скоро уйду из головы, стараюсь часами.

Код ниже код для события Button.click:

public void onClick(View arg0) 
      { 
       // TODO Auto-generated method stub 
       //txtClear(); 

       try { 

        Intent myIntent = new Intent(SMSAlarm.this, MyAlarmService.class); 
        smsNumber = txtPhoneNo.getText().toString(); 
        smsText = txtMessage.getText().toString(); 

//     if(smsNumber.length()<=0 || smsText.length()<=0) 
//     { 
//      Toast.makeText(getBaseContext(), 
//        "Please enter both phone number and message", 
//        Toast.LENGTH_SHORT).show(); 
//     } 
//     else 
//     { 

        TimePicker timePickerAlarm = (TimePicker) findViewById(R.id.timePickerAlarm); 
        DatePicker datePick = (DatePicker) findViewById(R.id.datePickerAlarm); 

        Calendar calendar = calendarInformation(timePickerAlarm, 
          datePick); 

        Calendar today = Calendar.getInstance(); 

        //Check if chosen date is less than the current date and time 
        //IF True, inform the user that the selected date has passed 
        //ELSE, start the service for sending SMS 

//     if(calendar.getTime().getTime() <= today.getTime().getTime()) 
//     { 
//      Toast.makeText(getBaseContext(), "Date has passed!\nPlease choose a new date", Toast.LENGTH_LONG).show(); 
//     } 
//     else 
//     { 

         Toast.makeText(SMSAlarm.this, 
           "Start Alarm with \n" + 
           "smsNumber = " + smsNumber + "\n" + 
           "smsText = " + smsText, 
           Toast.LENGTH_LONG).show(); 

         Bundle bundle = new Bundle(); 
         bundle.putCharSequence("extraSmsNumber", smsNumber); 
         bundle.putCharSequence("extraSmsText", smsText); 
         myIntent.putExtras(bundle); 
         requestCode+= 1; 
         //Temporary solution. Added to make the requestCode unique, to be able to send more than one SMS in a row with different text and to a different number. 
         pendingIntent = PendingIntent.getService(SMSAlarm.this, requestCode, myIntent, PendingIntent.FLAG_ONE_SHOT); //PendingIntent.FLAG_ONE_SHOT 
         //pendingIntent = PendingIntent.getService(SMSAlarm.this, 0, myIntent, 0); 
         //} 
        //} 
        txtClear(); 
       }          
       catch (Exception e) 
       { 
        // TODO Auto-generated catch block 
        Toast.makeText(getBaseContext(), "Error sending SMS " + e.getMessage(), Toast.LENGTH_LONG).show(); 
        e.printStackTrace(); 
        txtClear(); 
       } 
       } 

А вот класс MyAlarmService:

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 IBinder onBind(Intent arg0) 
    { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show(); 
     return null; 
    } 

    @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) 
    { 
     //TODO Auto-generated method stub 
     try { 
      super.onStart(intent, startId);  

      Bundle bundle = intent.getExtras(); 
      smsNumberToSend = (String) bundle.getCharSequence("extraSmsNumber"); 
      smsTextToSend = (String) bundle.getCharSequence("extraSmsText"); 

      Toast.makeText(this, "Sending Message...", Toast.LENGTH_LONG).show(); 
      Toast.makeText(this, 
        "Number = " + smsNumberToSend + "\n" + 
        "Message = " + smsTextToSend,    
        Toast.LENGTH_LONG).show(); 

      sendSMS(smsNumberToSend, smsTextToSend); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    private void sendSMS(String phoneNumber, String message) { 
     // TODO Auto-generated method stub 
     SmsManager smsManager = SmsManager.getDefault(); 
     smsManager.sendTextMessage(phoneNumber, null, message, null, null); 
    } 

    @Override 
    public boolean onUnbind(Intent intent) 
    { 
     //TODO Auto-generated method stub 
     Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();   
     return super.onUnbind(intent);  
    } 
} 

Любая помощь очень ценится

+0

Когда/Где начинается MyAlarmService? – Peter

+0

pendingIntent = PendingIntent.getService (SMSAlarm.this, requestCode, myIntent, PendingIntent.FLAG_ONE_SHOT); И что происходит в событии Button.click, но это происходит только во второй раз, когда я нажал кнопку: S – Anton

ответ

0
  pendingIntent = PendingIntent.getService(SMSAlarm.this, requestCode, myIntent, 
           PendingIntent.FLAG_ONE_SHOT); 

изменение PendingIntent.FLAG_ONE_SHOT as myIntent.FLAG_ACTIVITY_NEW_TASK