Android SMS - отправляет сообщение после двойного нажатия кнопки Button.click - PullRequest
0 голосов
/ 09 декабря 2011

Привет всем вам в Stackoverflow.

У меня возникла эта невероятно раздражающая проблема.Я пытаюсь создать приложение 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);      
    }
}

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

1 Ответ

0 голосов
/ 17 февраля 2012
          pendingIntent = PendingIntent.getService(SMSAlarm.this, requestCode, myIntent,
                                PendingIntent.FLAG_ONE_SHOT); 

изменить PendingIntent.FLAG_ONE_SHOT на myIntent.FLAG_ACTIVITY_NEW_TASK

...