2013-04-04 73 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版本。 否則,我也不知道。

乾杯, 伊姆雷