Flutter Foreground Service 注意事項

使用 flutter foreground task package 時,為了適配 Android 14 以上環境,有幾個需要留意的地方:

{project root}\android\app\build.gradle

  1. 最低SDK版本至少為 21:minSdkVersion 21
  2. 目標SDK版本至少為34:targetSdkVersion 34

{project root}\android\app\src\main\AndroidManifest.xml

  1. 權限宣告建議要有系統通知視窗 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” />
  2. 服務 service 參數的名稱 name 就是 flutter foreground task package 的固定名稱:
    android:name=”com.pravera.flutter_foreground_task.service.ForegroundService”
  3. 服務 service 參數一定要定義服務類型 foregroundServiceType
  4. 舉前景服務使用藍芽掃描為例,服務類型為:
    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

This site uses Akismet to reduce spam. Learn how your comment data is processed.