2013-04-04 65 views
0

我有服务在指定的时间发送短信,但我注意到多次收到相同的短信。不知道为什么会发生。Android:多次收到短信

设置时间发送短信11:45 pm后,我得到了同样的消息在11:45 pm05:58 am09:58 am01:01 pm

这里4次是我发短信代码:

Intent myIntent = new Intent(AlarmActivity.this, 
        SendSmsService.class); 
      pendingIntent = PendingIntent.getService(AlarmActivity.this, 0, 
        myIntent, 0); 

      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

      Calendar cal = Calendar.getInstance(); 
      cal.set(Calendar.HOUR_OF_DAY, TimePreference.getHour(sendTime)); 
      cal.set(Calendar.MINUTE, TimePreference.getMinute(sendTime)); 
      cal.set(Calendar.SECOND, 0); 
      cal.set(Calendar.MILLISECOND, 0); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
        pendingIntent); 

,这里是SendSmsService.java

public class SendSmsService extends Service 
{ 
    private static final String TAG = SendSmsService.class.getSimpleName(); 

    String CompleteAddr, eContact1, eContact2, eContact3; 
    String smsString; 
    boolean acknowledged; 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
     super.onCreate(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     Log.v(TAG, "onStartCommand"); 
     getSharedSettings(); 

     if (acknowledged == false) { 
      if (eContact1 != "") 
       sendSMS(eContact1, smsString + CompleteAddr); 
      if (eContact2 != "") 
       sendSMS(eContact2, smsString + CompleteAddr); 
      if (eContact3 != "") 
       sendSMS(eContact3, smsString + CompleteAddr); 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public boolean onUnbind(Intent intent) { 
     // TODO Auto-generated method stub 
     return super.onUnbind(intent); 
    } 

    private void sendSMS(String phoneNumber, String message) { 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, null, null); 
    } 
} 

任何建议和意见,将不胜感激
谢谢

回答

0

在服务使用“onCreate”行动为您的主代码,而不是“onStartCommand()”。

+0

感谢快速反应,你确定这将解决我的问题? – juned 2013-04-04 09:54:31

+0

正如我从您的代码中可以看到的,您不需要始终运行服务。所以,只需启动它(AlarmManeger)并在完成发送SMS后停止它(onCreate将只运行一次)。 如果你使用onStartCommand(),你可以调用服务将被暂停并由系统调出(当你不需要它时)。 – Utisevalec 2013-04-04 09:59:41

+0

谢谢,我会试试:) – juned 2013-04-04 10:09:51

0

这可能是一个问题,在你的手机里发生,阻止了正确的回应发送短信。

我的索尼Xperia Pro(MK16i)在Android 4.0.4(ICS)上运行时遇到了同样的问题。

每当我安装一个应用程序,在摇晃,扭曲或转动问题时将屏幕关闭:SMS的多个副本。 当我禁用它甚至更好时,卸载它,一切都变成正常。 显然,该应用程序可以防止短信接收报告发送回SMS提供商(电话公司)的服务器。 然后这些认为短信没有收到(电话关闭或类似)蚂蚁尝试是10​​分钟左右(取决于提供商)再次。 这会导致多个收据。直到手机有机会发送SMS-Receive-Reports回来。然后整个马戏团停下来。直到下一个SMS。

尝试查看是否有东西使用设备控制插槽(请参阅设置安全性)。尝试禁用或卸载它。 或者获得更新的手机或Android版本。 否则,我也不知道。

干杯, 伊姆雷