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" />
ここで述べたように バックグラウンドサービスの制限 、アプリ/サービスはstartForeground()
を呼び出すために5秒あります。アプリが制限時間内にstartForeground()を呼び出さない場合、システムはサービスを停止して宣言しますアプリはANRになります。
いくつかの可能性があります。
startForeground()
メソッドを呼び出す前に、フォアグラウンドサービスが破棄または終了します。onCreate
メソッドは呼び出されず、代わりにonStartCommand
が呼び出されます。次に、ロジックをonStartCommand
に移動して、startForeground()
メソッドを呼び出します。startForeground
の通知ID 以外である必要があります 、それ以外の場合はクラッシュの原因にもなります。Pieのフォアグラウンドサービスで何かが変わっていますか?
YESここをご覧ください Android 9/Pieの移行ノート
変更
フォアグラウンドサービス許可
概要
フォアグラウンドサービスを使用するアプリは、最初に FOREGROUND_SERVICE 権限を要求する必要があります。これは通常の許可であるため、システムは要求元のアプリに自動的に許可します。許可なしでフォアグラウンドサービスを開始すると、SecurityExceptionがスローされます。
UPDATE
google Issue Trackerの関連問題 Context.startForegroundService()はService.startForegroundを呼び出しませんでした