2012-10-03 57 views
1

我使用http://mobiforge.com/developing/story/sms-messaging-android代碼示例逐字逐句除了事實,我改變:編程方式發送短信的Android(不接收狀態)

import android.telephony.gsm.SmsManager; 

到:

import android.telephony.SmsManager; 

的短信發送罰款但是我沒有收到它傳遞(發送到網絡)的TOAST消息。我正在嘗試將SMS集成到我的應用程序中,這很重要。我確信可以這樣做,因爲股票SMS應用程序知道何時停止顯示「發送循環」。相關的代碼段如下:

//---when the SMS has been sent--- 
    registerReceiver(new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS sent", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(getBaseContext(), "Null PDU", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(getBaseContext(), "Radio off", 
          Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }, new IntentFilter(SENT)); 

    //---when the SMS has been delivered--- 
    registerReceiver(new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS delivered", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(getBaseContext(), "SMS not delivered", 
          Toast.LENGTH_SHORT).show(); 
        break;       
      } 
     } 
    }, new IntentFilter(DELIVERED));   

我使用的是果凍豆ROM,但我相信我剛纔測試了同一網段中的薑餅和ICS具有相同的結果。 API是否發生了變化,或者樣本存在問題?如果有幫助,我正在測試Sasmsung GSIII。我的舊測試是在一個史詩。

+0

您是否安裝了Go SMS或類似的東西? –

+0

沒有。目前我正在使用股票ASOP短信應用程序(正在運行CyannogenMod),但在韌體中的其他ROM上進行了測試。我沒有在ADB logcat中看到任何意圖。 – user974896

+0

可能的重複[編程發送短信(未獲取交付狀態)](http://stackoverflow.com/questions/12701215/programatically-send-sms-not-getting-delivery-status) – Sam

回答

0

你的代碼看起來不錯。也許問題在於您的運營商不會向您提供送達報告(可能有訂閱服務的選項),或者您尚未在移動設備上啓用送達報告。在Play商店中有一款名爲Delivery Reports的應用程序,您可以從中查看每個短信的狀態。

1

對於現在有這個問題的任何人,如果您在Android 4.4或更高版本上進行測試,除非您的應用程序是默認的短信應用程序,否則無法正常工作。

從文檔 -

與Android 4.4開始,系統設置允許用戶選擇 「默認的短信應用。」一旦選定,只有默認的SMS應用程序能夠寫入SMS提供程序,並且只有默認的SMS應用程序在用戶收到SMS時收到SMS_DELIVER_ACTION廣播,或者當用戶收到MMS時收到WAP_PUSH_DELIVER_ACTION廣播。默認的SMS應用程序負責在收到或發送新消息時向SMS提供程序寫入詳細信息。

請參閱here