手機端 局域網服務端
┌─────────────────┐ HTTP/TCP ┌─────────────────┐
│ 1. 監聽網絡變化 │ ─────────────────────▶ │ 2. 接收數據 │
│ 2. 讀取短信/通訊錄│ ◀───────────────────── │ 3. 存儲/管理 │
│ 3. 發送數據 │ │ 4. 提供查看介面 │
└─────────────────┘ └─────────────────┘
// 權限
// 讀取短信
Cursor cursor = getContentResolver().query(Uri.parse("content://sms/"),
new String[]{"_id", "address", "body", "date", "type"}, null, null, "date DESC");
// 讀取通訊錄
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME},
null, null, null);
WIFI_STATE_CHANGED / CONNECTIVITY_CHANGE(即時但受限 Android 8+ 隱式廣播限制)語言任選:Python (Flask/FastAPI)、Node.js (Express)、Go (Gin)、Java (Spring Boot/Spark)、C# (ASP.NET Core)。
# Python Flask 示例
from flask import Flask, request, jsonify
import json, os, datetime
app = Flask(__name__)
DATA_DIR = "./backups"
@app.route('/backup/sms', methods=['POST'])
def backup_sms():
data = request.get_json()
phone = data.get('phone', 'unknown')
filename = f"{DATA_DIR}/sms_{phone}_{datetime.date.today()}.json"
with open(filename, 'a', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
f.write('\n')
return jsonify({"status": "ok"})
if __name__ == '__main__':
os.makedirs(DATA_DIR, exist_ok=True)
app.run(host='0.0.0.0', port=5000)
// JSON 結構
{
"type": "sms", // 或 "contact"
"phone": "138xxxxxxxx", // 手機標識
"timestamp": 1699999999,
"data": [
{"address": "10086", "body": "您的話費...", "date": 1699999990, "type": 1},
...
]
}
核心路徑:Android 讀取數據 → 局域網 HTTP POST → 服務端持久化。關鍵在「自動觸發」與「增量同步」策略。建議先用 Python Flask 快速跑通最小閉環,再逐步完善觸發機制與安全性。