Эй, все вы в 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);
}
}
Любая помощь очень ценится
Когда/Где начинается MyAlarmService? – Peter
pendingIntent = PendingIntent.getService (SMSAlarm.this, requestCode, myIntent, PendingIntent.FLAG_ONE_SHOT); И что происходит в событии Button.click, но это происходит только во второй раз, когда я нажал кнопку: S – Anton