使用 flutter foreground task package 時,為了適配 Android 14 以上環境,有幾個需要留意的地方:
{project root}\android\app\build.gradle
- 最低SDK版本至少為 21:minSdkVersion 21
- 目標SDK版本至少為34:targetSdkVersion 34
{project root}\android\app\src\main\AndroidManifest.xml
- 權限宣告建議要有系統通知視窗 SYSTEM_ALERT_WINDOW 和忽略電池最佳化 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:
<uses-permission android:name=”android.permission.SYSTEM_ALERT_WINDOW” />
<uses-permission android:name=”android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS” /> - 服務 service 參數的名稱 name 就是 flutter foreground task package 的固定名稱:
android:name=”com.pravera.flutter_foreground_task.service.ForegroundService” - 服務 service 參數一定要定義服務類型 foregroundServiceType
- 舉前景服務使用藍芽掃描為例,服務類型為:
android:foregroundServiceType=”connectedDevice”
而對應的權限宣告就需要包含前景服務連線裝置 FOREGROUND_SERVICE_CONNECTED_DEVICE、變更網路狀態 CHANGE_NETWORK_STATE 和 藍芽掃描 BLUETOOTH_SCAN:
<uses-permission android:name=”android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE” />
<uses-permission android:name=”android.permission.BLUETOOTH_SCAN” />
<uses-permission android:name=”android.permission.CHANGE_NETWORK_STATE” />

lib\main.dart
前景服務啟動前,記得要動態取得權限,包含 System Alert、Ignore Battery Optimizations 和最重要的 Notification。(以下節錄自 官方的範例程式碼 )



Leave a comment