嗨,所有人都在Stackoverflow。
我遇到了令人难以置信的恼人问题。我尝试构建一个SMS应用程序,它将使用AlarmManager在特定时间发送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 :(得分:0)
pendingIntent = PendingIntent.getService(SMSAlarm.this, requestCode, myIntent,
PendingIntent.FLAG_ONE_SHOT);
将PendingIntent.FLAG_ONE_SHOT更改为myIntent.FLAG_ACTIVITY_NEW_TASK