在 Android 開發中,每個 Activity 經常需要重複編寫通話、簡訊、聯絡人讀取、儲存空間查詢、網路請求、SharedPreferences 操作等樣板代碼。本文分享一個功能豐富的 BaseActivity,將這些高頻工具方法封裝於父類中,子類繼承即可直接調用,大幅提升開發效率。
| 分類 | 代表方法 | 說明 |
|---|---|---|
| 電話與簡訊 | Call(String), sendSMS(String, String), getAllSMS(), getSentSms(), getReceivedSms() | 撥打電話、發送/查詢簡訊 |
| 聯絡人 | getContacts(), insertContacts(Contact...) | 讀取/寫入聯絡人 |
| 儲存空間 | getPhoneDataDirectory(), getSDCardDirectory(), getPhoneFreeSize(), getSDcardFreeSize(), getPhoneSize(), getSDCardSize() | 取得內部/外部儲存路徑與可用空間 |
| 網路請求 | Get(String, NetResult), Post(String, Map, NetResult), Post(String, Map, Map, NetResult), download(String, NetResult) | 支援 GET/POST、表單上傳、檔案下載 |
| SharedPreferences | GetSharedPreferences(), GetSharedPreferences(String), PutSharedPreferences(String, Object), PutSharedPreferences(SharedPreferences, String, Object), SetSharedPreference(SharedPreferences) | 鍵值對持久化存取 |
| 系統工具 | isNetWorkUseful(), isSDCardUseful(), formatMemorySize(long), Show(int) | 網路/SD卡狀態檢測、記憶體格式化、自訂 Toast |
void Call(java.lang.String number) // 撥打電話 void download(java.lang.String url, NetResult result) // 下載檔案 java.lang.String formatMemorySize(long memorySize) // 格式化記憶體大小 void Get(java.lang.String url, NetResult result) // GET 請求 java.util.List getAllSMS() // 取得所有簡訊 java.util.List getContacts() // 取得所有聯絡人 java.io.File getPhoneDataDirectory() // 手機內部儲存目錄 long getPhoneFreeSize() // 手機可用空間 long getPhoneSize() // 手機總空間 java.io.File getSDCardDirectory() // SD卡目錄 long getSDcardFreeSize() // SD卡可用空間 long getSDCardSize() // SD卡總空間 SharedPreferences GetSharedPreferences() // 預設 SharedPreferences SharedPreferences GetSharedPreferences(java.lang.String name) // 指定名稱 SharedPreferences java.util.List getSMSByAddress(java.lang.String address) // 指定號碼簡訊 void insertContacts(Contact... contacts) // 插入聯絡人 void insertSMS(SMS... smss) // 插入簡訊 boolean isNetWorkUseful() // 網路是否可用 boolean isSDCardUseful() // SD卡是否有效 void Post(java.lang.String actionUrl, java.util.Map params, java.util.Map files, NetResult netResult) // POST 上傳檔案 void Post(java.lang.String url, java.util.Map params, NetResult result) // POST 提交數據 void PutSharedPreferences(SharedPreferences sp, java.lang.String key, java.lang.Object value) // 存入指定 SP void PutSharedPreferences(java.lang.String key, java.lang.Object value) // 存入預設 SP boolean sendSMS(java.lang.String number, java.lang.String content) // 發送簡訊 void SetSharedPreference(SharedPreferences sharedPreferences) // 設定自定義 SP void Show(int layout_ID) // 顯示自訂提示
AndroidManifest.xml 添加必要權限:<uses-permission android:name="android.permission.CALL_PHONE" /><uses-permission android:name="android.permission.SEND_SMS" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /><uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.WRITE_SMS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />BaseActivity:public class MainActivity extends BaseActivity { ... }Call("10086");String size = formatMemorySize(getPhoneFreeSize());Post("https://api.example.com", params, callback);NetResult 介面,支援成功/失敗/進度回調。Android 6.0+ 需動態申請危險權限(CALL_PHONE, READ_CONTACTS 等),本基類未包含權限請求邏輯,請在子類或使用前自行處理。網路請求預設使用 HttpURLConnection,生產環境建議替換為 OkHttp 或 Retrofit。