Android HTTP 協定與網路權限
幾乎所有的現代 App 都需要連上網路。在開始串接 API 之前,我們需要先了解 Android 上的網路基礎設定。
網路權限 (Internet Permission)
Android 系統預設是禁止 App 使用網路的。你必須在 AndroidManifest.xml 中明確宣告權限。
打開 app/src/main/AndroidManifest.xml,在 <application> 標籤上方加入:
<manifest ...>
<!-- 必備:允許 App 存取網路 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 選用:允許 App 檢查網路狀態 (Wi-Fi/4G) -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application ...>
...
</application>
</manifest>
如果你忘了加這行,App 在發送請求時會直接拋出 SecurityException 並崩潰。
明文傳輸限制 (Cleartext Traffic)
從 Android 9 (API 28) 開始,Google 為了安全性,預設禁止 App 連線到非加密的 HTTP 網站 (http://),強制要求使用 HTTPS (https://)。
如果你嘗試連線到 http://example.com,會收到 Cleartext HTTP traffic not permitted 錯誤。
解決方案
方法 A:使用 HTTPS (推薦)
將所有的 API 網址改為 https://。這是最安全也最正確的做法。
方法 B:設定 Network Security Config (例外開放)
如果你的測試伺服器只有 HTTP,可以設定例外。
在
res/xml/下建立network_security_config.xml:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">api.example.com</domain> <domain includeSubdomains="true">192.168.1.100</domain> <!-- 內網 IP --> </domain-config> </network-security-config>在
AndroidManifest.xml中參照此設定:<application android:networkSecurityConfig="@xml/network_security_config" ...>
方法 C:全面開放 (不推薦)
僅限測試階段使用,切勿用於正式版。
<application
android:usesCleartextTraffic="true"
...>
主執行緒限制 (Main Thread Policy)
Android 絕對禁止在主執行緒 (UI Thread) 執行網路操作。這會導致 App 畫面凍結,甚至觸發 ANR (Application Not Responding)。如果你硬要在主執行緒連網,會收到 NetworkOnMainThreadException。
解決方案:
總是使用 Coroutines (Dispatchers.IO) 或第三方函式庫 (Retrofit, OkHttp) 來處理網路請求。這些庫內部會自動切換到背景執行緒。
小結
- 記得加
INTERNET權限。 - API 盡量使用 HTTPS。
- 網路操作必須在背景執行緒進行。