簡體   English   中英

Java Android,如何知道是否成功發送短信?

[英]Java android, how to know if a sms is successfully sent?

我怎么知道短信是否發送成功?

我已經檢查了文檔,但沒有找到解決問題的方法...我怎么知道?

//---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();
                        getServerData("http://site.com","id",Id);

                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        System.exit(0);
                        Toast.makeText(getBaseContext(), "Generic failure", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        System.exit(0);
                        Toast.makeText(getBaseContext(), "No service", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.STATUS_ON_SIM_UNSENT:
                        System.exit(0);
                        Toast.makeText(getBaseContext(), "Message unsent", Toast.LENGTH_SHORT).show();
                        break;

                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        System.exit(0);
                        Toast.makeText(getBaseContext(), "Null PDU", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        System.exit(0);
                        Toast.makeText(getBaseContext(), "Radio off", Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.STATUS_ON_SIM_SENT :
                        System.exit(0);
                        Toast.makeText(getBaseContext(), "Message sent", 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));        





        if(isMobileAvailable(getApplicationContext()) == true){
            Toast.makeText(getApplicationContext(), "Reseau mobile: OK !", Toast.LENGTH_LONG).show();

             ArrayList<String> parts = (ArrayList<String>) splitInChunks(message, 120);
               for (String str : parts) {
                   SmsManager sms = SmsManager.getDefault();
                   sms.sendTextMessage(phoneNumber, null, str, null, null);
              }
               getServerData("http://site.com","id",Id);

        }else
            Toast.makeText(getApplicationContext(), "Reseau mobile: NOK !", Toast.LENGTH_LONG).show();
    }

我只是想知道我的短信是否發送成功了……請問!

我認為您應該嘗試使用此內容觀察程序代碼。.它密切注意味精的天氣內容是否已更改。

private class MyContentObserver extends ContentObserver {
    ContentValues values = new ContentValues();
    int threadId;

    public MyContentObserver() {
        super(null);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Uri uriSMSURI = Uri.parse("content://sms");
        Cursor cur = getBaseContext().getContentResolver().query(uriSMSURI, null, null, null, null);
        cur.moveToNext();
        String content = cur.getString(cur.getColumnIndex("body"));
        String contentid = cur.getString(cur.getColumnIndex("_id"));

        Log.v(TAG, "content: " + content+"id:"+contentid);
    }

    @Override
    public boolean deliverSelfNotifications() {
        return false;
    }
}

添加到@Aexin

Inbox = "content://sms/inbox"
Failed = "content://sms/failed"
Queued = "content://sms/queued"
Sent = "content://sms/sent"
Draft = "content://sms/draft"
Outbox = "content://sms/outbox"
Undelivered = "content://sms/undelivered"
All = "content://sms/all"
Conversations = "content://sms/conversations"

數據庫字段

0: _id
1: thread_id
2: address
3: person
4: date
5: protocol
6: read   
7: status
8: type
9: reply_path_present
10: subject
11: body
12: service_center
13: locked

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/provider/Telephony.java

@舒蒂

http://developer.android.com/reference/android/telephony/SmsManager.html#sendTextMessage(java.lang.String,java.lang.String,java.lang.String,android.app.PendingIntent,android.app。待定)

這顯然是說,如果必須執行回調,則必須提供將要廣播的PendingIntent。

如您在代碼中sms.sendTextMessage(phoneNumber, null, str, null, null);sms.sendTextMessage(phoneNumber, null, str, null, null);

http://developer.android.com/reference/android/app/PendingIntent.html

嘗試什么

Intent intent = new Intent();

pi = PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);

sms.sendTextMessage(phoneNumber, null, str, pi, null);

sms.sendTextMessage(phoneNumber, null, str, pi, pi);

無論如何

android.provider.Telephony.SMS_RECEIVED chceck(如果您正確安裝了此功能)(區分大小寫),並且還試圖理解這一點,因此並非所有的Broadcast都能通過Programaticaly注冊,反之亦然。

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM