⑴ 如何判斷android 簡訊發送是否成功
若使用的是vivo手機,未發送成功的簡訊,會顯示紅色感嘆號,已發送成功的簡訊則不顯示感嘆號,還可以進入設置--應用與許可權--系統應用設置--信息--打開短彩信送達報告,開啟後已送達的簡訊前面顯示箭頭。
⑵ 安卓手機無法發送簡訊
安卓手機簡訊功能無法使用處理方法:1、換個信號良好的地區或時間段測試;2、查詢SIM卡話費是否充足或者換張SIM卡嘗試;3、進入【設置】-【信息】-【簡訊中心號碼】,查看簡訊中心號碼是否正確;4、進入【設置】-【更多設置】-【應用程序】-【全部】-【Android
System
WebView】,點擊【卸載】或【更新】,然後重啟手機後再試;5、進入手機【設置】-【更多設置】-【恢復出廠設置】-【還原所有設置】(不會刪除手機任何數據)。若以上方式均嘗試無效,建議聯系手機官方售後處理。如需設置簡訊中心號碼,可回復:XX手機簡訊中心號碼設置方法(如:蘋果手機簡訊中心號碼設置方法/華為手機簡訊中心號碼設置方法)。
⑶ android直接發送p編碼後的簡訊
實現過程:
1>初始化:ATZ\r
2>設置文本模式:AT+CMGF=0\r(0:p模式,1:text模式)
3>設置PDU頭:
typedef struct {
char SCA[16]; // 短消息服務中心號碼(SMSC地址)
char TPA[16]; // 目標號碼或回復號碼(TP-DA或TP-RA)
char TP_PID; // 用戶信息協議標識(TP-PID)
char TP_DCS; // 用戶信息編碼方式(TP-DCS)
char TP_SCTS[16]; // 服務時間戳字元串(TP_SCTS), 接收時用到
char TP_UD[16]; // 原始用戶信息
char index; //短消息序號,在讀取時用到
}SM_PARAM;
// SMSC地址信息段
memset(buf, 0, sizeof(buf));
nLength = strlen(pSrc->SCA); // SMSC地址字元串的長度
buf[0] = (char)((nLength & 1) == 0 ? nLength : nLength + 1) / 2 + 1; // SMSC地址信息長度
buf[1] = 0x91; // 固定: 用國際格式號碼
nDstLength = gsmBytes2String(buf, pDst, 2); // 轉換2個位元組到目標PDU串
nDstLength += gsmInvertNumbers(pSrc->SCA, &pDst[nDstLength], nLength); // 轉換SMSC到目標PDU串
// TPDU段基本參數、目標地址等
memset(buf, 0, sizeof(buf));
nLength = strlen(pSrc->TPA); // TP-DA地址字元串的長度
buf[0] = 0x11; // 是發送簡訊(TP-MTI=01),TP-VP用相對格式(TP-VPF=10)
buf[1] = 0; // TP-MR=0
buf[2] = (char)nLength; // 目標地址數字個數(TP-DA地址字元串真實長度)
buf[3] = 0x91; // 固定: 用國際格式號碼
nDstLength += gsmBytes2String(buf, &pDst[nDstLength], 4); // 轉換4個位元組到目標PDU串
nDstLength += gsmInvertNumbers(pSrc->TPA, &pDst[nDstLength], nLength); // 轉換TP-DA到目標PDU串
// TPDU段協議標識、編碼方式、用戶信息等
//nLength = strlen(pSrc->TP_UD); // 用戶信息字元串的長度
memset(buf, 0, sizeof(buf));
buf[0] = pSrc->TP_PID; // 協議標識(TP-PID)
buf[1] = pSrc->TP_DCS; // 用戶信息編碼方式(TP-DCS)
buf[2] = 1; // 有效期(TP-VP)為5分鍾
buf[3] = str2hex(user_p, pSrc->TP_UD); //用戶信息的長度
nDstLength += gsmBytes2String(buf, &pDst[nDstLength], 4); // 轉換該段數據到目標PDU串
strcat(p, "\x01a"); //以CTRL-A結束
gsmString2Bytes(p, &nSmscLength, 2); // 取PDU串中的SMSC信息長度
4>發送信息長度:AT+CMGS=長度,這步重要長度不對是發不出去的。
5>發送用戶信息
1、目前,發送短消息常用Text和PDU(Protocol Data Unit,協議數據單元)模式。
1>使用Text模式收發簡訊代碼簡單,實現起來十分容易,但最大的缺點是不能收發中文簡訊;
2>使用PDU模式不僅支持中文簡訊,也能發送英文簡訊。
2、PDU模式收發簡訊可以使用3種編碼:
1>7-bit(用於發送普通的ASCII字元,它將一串7-bit的字元(最高位為0)編碼成8-bit的數據,每8個字元可 「壓縮」成7個)
2>8-bit(通常用於發送數據消息,如:圖片了,鈴聲等等)
3>UCS2編碼(用於發送Unicode字元)
⑷ 在android中服務機制來做什麼發簡訊為什麼需要廣播
Service,後台運行,可交互這樣的一個東西。它跟Activity的級別差不多,但是他不能自己運行,需要通過某一個Activity或者其他Context對象來調用。
什麼時候需要Service呢?比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在後台繼續播放,比如檢測SD卡上文件的變化,再或者在後台記錄你地理信息位置的改變等等,總是藏在後頭的。
Broadcast 實質就是(發送方)並不在意(接收方)接收到廣播時如何處理。Android 中有各式各樣的廣播,各種廣播在Android 系統中運行,當系統/應用程序運行時便會向 Android 注冊各種廣播,Android 接收到廣播會便會判斷哪種廣播需要哪種事件,然後向不同需要事件的應用程序注冊事件,不同的廣播可能處理不同的事件也可能處理相同的廣播事件,這時就需要Android 系統為我們做篩選。
你要了解的是這個方法吧:public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
destinationAddress: 收件人地址
scAddress: 簡訊中心號碼,null為默認中心號碼
sentIntent: 當消息發出時,成功或者失敗的信息報告通過PendingIntent來廣播。如果該參數為空,則發信程序會被所有位置程序檢查一遍,這樣會導致發送時間延長。
deliveryIntent: 當消息發送到收件人時,該PendingIntent會被廣播。p數據在狀態報告的extended data ("p")中。
如果收件人或者信息為空則拋出 IllegalArgumentException 。
⑸ android 如何把彩信內容插入p表
給你提供點資料 做參考
在Android應用中讀取彩信文件涉及到Android的一個資料庫/data/data/com.android.providers.telephony/databases/mmssms.db和一個文件夾/data/data/com.android.providers.telephony/app_parts。要備份彩信,可以將這個資料庫和文件夾拷貝到硬碟,但是在應用中卻不能通過openDatabase系列方法來讀這個資料庫,也不能通過直接打開文件來讀取附件文件,因為你的應用不是它們的所有者,不能直接讀取,而要使用ContentProvider來讀取。
1、讀取mmssms.db資料庫
彩信的標題、發送者號碼、日期等數據存儲在mmssms.db的p表中,要讀取這個表可以使用系統提供的一個ContentProvider,URI是「content://mms」。操作這個ContentProvider和操作資料庫一樣,這個ContentProvider的結構也和p表的結構一樣,Android文檔對這些欄位沒有說明,但是可以通過將mmssms.db資料庫備份到硬碟上,然後再通過Sqlite Database Browser軟體來查看分析,具體可參考:blogjava.net。
content://mms主要的幾個欄位如下:
◆ _id:該條彩信的主鍵,對應著part表(ContentProvider的URI是content://mms/part,詳見後)中的mid欄位。
◆sub:該條彩信的標題
◆date:該條彩信的接收日期
下面的代碼可以查詢該CotnetProvider,得到一個cursor,並列出所有的列名。
Cursor cur = getContentResolver().query(Uri.parse("content://mms"),null, null, null, null);
String [] temp=cur.getColumnNames();
for (int i=0;i<temp.length;i++)
System.out.println(i+":"+temp);
通過上面的方法得到cursor後,就可以對這個cursor操作,並通過get方法得到_id,然後根據這個_id讀取彩信附件文件。
2、讀取彩信附件文件
彩信附件文件的地址存儲在mmssms.db的part表的_data欄位,形如「/data/data/com.android.providers.telephony/app_parts/PART_1262693697763」,但在應用中讀取彩信附件時,這個欄位基本沒什麼用,因為不能直接讀取這個文件。讀取同樣要通過ContentProvider,URI為「content://mms/part」,該URI就是對應著part表。可以使用下列代碼段來讀取文件:
String selection = new String("mid='" + key + "'");//這個key就是p裡面的_id。
Cursor cur = getContentResolver().query(Uri.parse("content://mms/part"), null, selection, null, null);
if (cur.moveToFirst())
do {
int _partID = cur.getInt(cur.getColumnIndex("_id"));
String partID = String.valueOf(_partID);
Uri partURI = Uri.parse("content://mms/part/" + partID);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
try {
is = getContentResolver().openInputStream(partURI);
byte[] buffer = new byte[256];
int len = is.read(buffer);
while (len >= 0)
{
baos.write(buffer, 0, len);
len = is.read(buffer);
}
} catch (IOException e) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
}
這里得到的baos,就是附件文件。
3、聲明permission
要在代碼中使用content://mms,content://mms/part,content://sms等,還要在AndroidManifest.xml中注冊premission,代碼如下:
</application>
<uses-permission android:name="android.permission.READ_SMS" />