Tag: service

  • Flutter Foreground Service 注意事項

    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。(以下節錄自 官方的範例程式碼 )

  • Flutter Foreground Task 常駐程式套件

    Flutter Foreground Task 常駐程式套件

    在 Flutter 官方經營的 https://pub.dev 上有相當多好用的程式套件,其中,Flutter Foreground Task 是許多人推薦能在 Android 和 iOS 實現[常駐程式]機制的套件。

    pub.dev 上幾乎所有套件都會提供 Example 範例程式,以展示其使用方式及效果。Flutter Foreground Task 的範例程式的展示效果如下圖所示。

    左邊的為程式主畫面,按下[start]按鈕後便會執行常駐程式,並手機最上方的區域顯示程式的 icon (時間右邊數來第二個);右邊的為手機滑下上方區域的畫面,flutter_oreground_task_example 為程式名稱、MyTaskHandler 為固定顯示的內容、eventCount 為動態更新的內容、 按下Send 和 Test 按鈕可觸發程式做動作(似乎是 Android限定)、整個區塊按下去可跳回程式。

    由於該範例程式極具參考價值,這裡做一張對應的程式流程圖以方便理解參考。

    另外,關於前景服務的概念,也可以參考 Domen Lanisnik 的文章(Android):https://medium.com/@domen.lanisnik/guide-to-foreground-services-on-android-9d0127dc8f9a