2010-10-06 59 views
11

Android không kích hoạt mục đích phân phối khi gửi tin nhắn văn bản. Tôi đang thử nghiệm điều này trên Android 2.2 trên HTC EVO 4G.Mục đích báo cáo gửi tin nhắn SMS của Android

Đây là mã hiện tại. Tôi thấy "Đã gửi ý định gửi SMS". trong nhật ký, nhưng không phải là "mục đích gửi SMS đã nhận được".

// 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

Do hệ điều hành hiện tại được triển khai trong Thunderbolt, HTC hoàn toàn ghi đè tất cả các kết quả của SMS được gửi và phân phối ý định. Nếu thông báo thành công thì mã kết quả có thể được trả lời, nhưng nếu thông báo không thành công, HTC sẽ tự động ghi đè tất cả các mã kết quả, mã của bạn sẽ không kích hoạt và tự động gửi lại tin nhắn. Về cơ bản, nếu bạn cố gắng gửi mã và nhận thông báo cho một ứng dụng SMS, bạn lãng phí thời gian của mình trên các thiết bị HTC! Tôi sẽ cố gắng và gửi một email đến HTC và nếu tôi nhận được phản hồi thì tôi sẽ bị sốc. –

+0

Bất kỳ câu trả lời hoặc tin tức mới nào? – cprcrack

+0

hãy xem cuộc thảo luận này: http://code.google.com/p/android/issues/detail?id=2305 – mtekeli

Trả lời

6

Gọi phương pháp này, nơi bạn muốn gửi 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 
     } 
    } 
} 

Lưu ý: Bạn phải chỉ rõ android.permission.SEND_SMS và android.permission.RECEIVE_SMS quyền trong file manifest và cũng nhận

<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

isSimExists() là gì? , đặt đoạn mã cho phương thức isSimExists() cũng là –

+2

@kirtiavaiya Plz tham khảo http://androidsnippets.wordpress.com/2012/08/07/how-to-check-whether-sim-card-exists-or-not-in -android/cho phương pháp isSimExists –

+0

Đây không phải là câu hỏi mà anh ta hỏi. Anh ta hỏi về PendingIntent đã được giao mà bạn không cung cấp cho hàm sendTextMessage(). – ocross

Các vấn đề liên quan