2010-10-06 18 views
11

System Android nie wysyła ostrzeżeń podczas wysyłania wiadomości tekstowej. Testuję to na Androidzie 2.2 na HTC EVO 4G.Zgłoszenie zamiaru wysłania wiadomości SMS na system Android

To jest bieżący kod. Widzę "Wysłano SMS wysłanego zamiaru". w dziennikach, ale nie "Wysłane wiadomości SMS w intencji odebrane.".

// Constants 
String SENT_ACTION = "SMS_SENT_ACTION"; 
String DELIVERED_ACTION = "SMS_DELIVERED_ACTION"; 
String CELL_NUMBER = "0000000000"; 
String MESSAGE = "Hello World!"; 

// SMS sent pending intent 
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, 
     new Intent(SENT_ACTION), 0); 

// SMS delivered pending intent 
PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, 
     new Intent(DELIVERED_ACTION), 0); 

// SMS sent receiver 
registerReceiver(new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS sent intent received."); 
    } 
}, new IntentFilter(SENT_ACTION)); 

// SMS delivered receiver 
registerReceiver(new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS delivered intent received."); 
    } 
}, new IntentFilter(DELIVERED_ACTION)); 

// Send the SMS message 
SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(CELL_NUMBER, null, MESSAGE, sentIntent, deliveredIntent); 
+2

Z bieżącego systemu operacyjnego wdrożonego w Thunderbolt, HTC całkowicie zastępuje wszystkie wyniki wysłanych i wysłanych wiadomości SMS. Jeśli komunikat powiedzie się, kody odpowiedzi mogą być odpowiedziały, ale jeśli komunikat nie powiedzie się, HTC automatycznie nadpisze wszystkie kody wyników, twój kod się nie uruchomi i automatycznie ponownie wyśle ​​wiadomość. Zasadniczo, jeśli próbujesz kodować wysyłane i odbierane powiadomienia dla aplikacji SMS, marnujesz swój czas na urządzeniach HTC! Mam zamiar wysłać e-mail do HTC i jeśli dostanę odpowiedź w ogóle, będę zszokowany. –

+0

Jakaś odpowiedź lub nowa wiadomość? – cprcrack

+0

spójrz na tę dyskusję: http://code.google.com/p/android/issues/detail?id=2305 – mtekeli

Odpowiedz

6

nazywają to metoda, w której chcesz wysłać SMS

private String SimState = ""; 
private String address = ""; // Recipient Phone Number 
private String message = ""; // Message Body 

private void sendSms() { 
    if (isSimExists()) { 
     try { 
      String SENT = "SMS_SENT"; 

      PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0); 

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

      SmsManager smsMgr = SmsManager.getDefault(); 
      smsMgr.sendTextMessage(address, null, message, sentPI, null); 
     } catch (Exception e) { 
      Toast.makeText(this, e.getMessage() + "!\n" + "Failed to send SMS", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } 
    } else { 
     Toast.makeText(this, SimState + " " + "Cannot send SMS", Toast.LENGTH_LONG).show(); 
    } 
} 


// For receiving sms 

class SMSReceiver extends BroadcastReceiver { 
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) { 
      // Sms Received Your code here 
     } 
    } 
} 

Uwaga: Musisz podać android.permission.SEND_SMS i android.permission.RECEIVE_SMS uprawnienia w pliku manifestu i również odbiornik

<receiver android:name=".SMSReceiver" android:enabled="true"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.tekeli.order" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="11" /> 
    <uses-permission android:name="android.permission.SEND_SMS" ></uses-permission> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".ActivityOrderActivity" 
      android:label="@string/app_name"> 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".B" ></activity> 
     <activity android:name=".C"></activity> 
    </application> 

</manifest> 
+0

Co to jest isSimExists()? , umieść fragment kodu dla metody isSimExists() również –

+2

@kirtiavaiya Plz refer http://androidsnippets.wordpress.com/2012/08/07/how-to-check-whether-sim-card-exists- or-not-in -android/dla metody isSimExists –

+0

Nie o to pytał. Pytał o dostarczony PendingIntent, którego nie dostarczasz do funkcji sendTextMessage(). – ocross

Powiązane problemy