首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 向系統短信數據庫插入數據並模擬新短信推送通知

     編輯:程式設計綜合問答

需求分析

向 content://sms 插入一條未讀短信,並觸發系統通知欄提示,效果等同真實收到短信,且無需重啟模擬器/手機。

核心步驟

  1. 構造 ContentValues 插入短信數據庫
  2. 發送 SMS_RECEIVED_ACTION 廣播通知系統短信應用
  3. (可選)發送自定義通知作為備選

1. 插入短信數據庫

ContentValues values = new ContentValues();
values.put("address", phoneNumber);      // 發送方號碼
values.put("body", messageBody);         // 短信內容
values.put("date", System.currentTimeMillis());
values.put("read", 0);                   // 0=未讀
values.put("type", 1);                   // 1=接收
context.getContentResolver().insert(Uri.parse("content://sms"), values);

2. 發送系統廣播觸發原生通知(關鍵)

系統短信應用監聽 android.provider.Telephony.SMS_RECEIVED 廣播,發送該廣播即可觸發原生通知:

Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED");
// 構造模擬 PDU 數據(簡化版,完整需編碼 PDU)
intent.putExtra("pdus", new Object[]{/* 模擬 SmsMessage PDU */});
intent.putExtra("format", "3gpp");
context.sendBroadcast(intent, "android.permission.RECEIVE_SMS"); // 需權限

注意:Android 4.4+ 只有默認短信應用能接收此廣播,且需 RECEIVE_SMS 權限。普通應用無法直接發送帶權限的廣播。

3. 替代方案:自建 Notification 通知

若無法發送系統廣播,可自行構建通知引導用戶進入短信應用:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_sms)
    .setContentTitle(phoneNumber)
    .setContentText(messageBody)
    .setAutoCancel(true)
    .setContentIntent(PendingIntent.getActivity(context, 0,
        new Intent(Intent.ACTION_VIEW, Uri.parse("content://sms")), 0));

NotificationManagerCompat.from(context).notify(1, builder.build());

完整權限聲明

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" /> // 僅系統應用可用

避坑指南

  • Android 7.0+ 寫入 content://sms 需為默認短信應用或獲取 WRITE_SMS 權限(用戶手動授予)。
  • 模擬 PDU 編碼複雜,建議直接啟動短信應用 Intent 而非偽造廣播。
  • 自建通知無法在鎖屏顯示「新短信」樣式,僅作提醒入口。

結合數據庫寫入與自建通知,可實現「插入短信並提醒」的業務閉環,但完全模擬系統級推送受限於權限機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved