web-dev-qa-db-ja.com

Android 9(パイ)のみ:Context.startForegroundService()はService.startForeground()を呼び出しませんでした-Oreoで正常に動作します

Oreoの継続的な通知を調整し、うまく機能しました。現在、Pieのみ(Oreoデバイスでは発生していません)で、タイトルのエラーが発生しています。 Pieのフォアグラウンドサービスで何かが変わっていますか?

フォアグラウンドサービスのonCreateコードは次のとおりです->

override fun onCreate() {
    super.onCreate()

    val notification: Notification = NotificationCompat.Builder(this, packageName)
            .setSmallIcon(R.drawable.status_notification_icon)
            .setContentTitle(getString(R.string.ongoing_notify_temp_title))
            .setContentText(getString(R.string.ongoing_notify_temp_message))
            .setGroup(AppConstants.NOTIFICATION_GROUP_ONGOING)
            .setColor(ContextCompat.getColor(this, R.color.custom_blue))
            .build()

    startForeground(ONGOING_NOTIFY_ID, notification)

    appSettings = AppSettings(this)

    weatherLookUpHelper = WeatherLookUpHelper()
    MyRoomDatabase.getInstance().invalidationTracker.addObserver(onChange)

    retrieveCurrentLocation()
    createAlarmManager()
}

ご覧のとおり、通知を作成してからstartForegroundを呼び出しています。このコードがタイトル付きエラーを生成する理由についてのアイデアはありますか?

サイドノート:Fabric Crashlyticsは、Pieを実行しているPixelデバイス(pixel、pixel xl、pixel 2、pixel 2 xl)でのみこのクラッシュが発生することを示しています

編集:マニフェストにフォアグラウンド許可があります

<uses-permission Android:name="Android.permission.FOREGROUND_SERVICE" />
15
Psest328

ここで述べたように バックグラウンドサービスの制限 、アプリ/サービスはstartForeground()を呼び出すために5秒あります。アプリが制限時間内にstartForeground()を呼び出さない場合、システムはサービスを停止して宣言しますアプリはANRになります。

いくつかの可能性があります。

  1. startForeground()メソッドを呼び出す前に、フォアグラウンドサービスが破棄または終了します。
  2. または、フォアグラウンドサービスが既にインスタンス化されており、再度呼び出されると、onCreateメソッドは呼び出されず、代わりにonStartCommandが呼び出されます。次に、ロジックをonStartCommandに移動して、startForeground()メソッドを呼び出します。
  3. startForegroundの通知ID 以外である必要があります 、それ以外の場合はクラッシュの原因にもなります。
5
Arshad Mehmood

Pieのフォアグラウンドサービスで何かが変わっていますか?

YESここをご覧ください Android 9/Pieの移行ノート

変更

フォアグラウンドサービス許可

概要

フォアグラウンドサービスを使用するアプリは、最初に FOREGROUND_SERVICE 権限を要求する必要があります。これは通常の許可であるため、システムは要求元のアプリに自動的に許可します。許可なしでフォアグラウンドサービスを開始すると、SecurityExceptionがスローされます。

UPDATE

google Issue Trackerの関連問題 Context.startForegroundService()はService.startForegroundを呼び出しませんでした

1
Nilesh Rathod