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

局域網手機本地備份服務器搭建方案:短信通訊錄自動同步

     編輯:程式設計疑難解答

需求拆解

  • 手機接入 WiFi → 自動觸發備份
  • 備份內容:短信、通訊錄
  • 純局域網,無公網依賴
  • 服務端運行在電腦/NAS/閒置手機上

整體架構

手機端                                    局域網服務端
┌─────────────────┐         HTTP/TCP        ┌─────────────────┐
│ 1. 監聽網絡變化  │ ─────────────────────▶ │ 2. 接收數據      │
│ 2. 讀取短信/通訊錄│ ◀───────────────────── │ 3. 存儲/管理      │
│ 3. 發送數據       │                         │ 4. 提供查看介面   │
└─────────────────┘                         └─────────────────┘

關鍵技術點實現

1. Android 端:讀取短信與通訊錄

// 權限





// 讀取短信
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);

2. 自動觸發機制

  • 方案 A:WorkManager 定期檢查 WiFi 狀態(推薦,系統優化電量)
  • 方案 B:BroadcastReceiver 監聽 WIFI_STATE_CHANGED / CONNECTIVITY_CHANGE(即時但受限 Android 8+ 隱式廣播限制)
  • 方案 C:前台服務 + 定時器(持續運行,需通知欄常駐)

3. 服務端:輕量級 HTTP 接收服務

語言任選: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)

4. 數據傳輸格式建議

// JSON 結構
{
  "type": "sms",           // 或 "contact"
  "phone": "138xxxxxxxx",  // 手機標識
  "timestamp": 1699999999,
  "data": [
    {"address": "10086", "body": "您的話費...", "date": 1699999990, "type": 1},
    ...
  ]
}

進階優化

  • 增量備份:手機端記錄上次備份最大 ID/時間戳,只上傳新增數據。
  • 斷點續傳:大量短信分批上傳,服務端支持追加寫入。
  • 加密傳輸:局域網雖相對安全,建議 HTTPS (自簽證書) 或 AES 加密 payload。
  • Web 管理界面:服務端提供簡單頁面查看、導出、搜索備份記錄。

替代方案:現成工具

  • Syncthing:P2P 同步,可同步短信導出文件目錄(需配合導出腳本)。
  • KDE Connect / GSConnect:手機與電腦局域網互聯,支持短信讀取回復、文件傳輸。
  • Termux + rsync/ssh:高級用戶可在手機跑 Linux 環境直接同步。

總結

核心路徑:Android 讀取數據 → 局域網 HTTP POST → 服務端持久化。關鍵在「自動觸發」與「增量同步」策略。建議先用 Python Flask 快速跑通最小閉環,再逐步完善觸發機制與安全性。

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