From 38894ba80c7293a874b505696279c5e475908862 Mon Sep 17 00:00:00 2001 From: Shuming Liu Date: Sat, 24 Oct 2026 13:04:57 +0800 Subject: [PATCH] playing in background --- .../src/main/AndroidManifest.xml | 2 + .../oraltrainer/sdk/OralTrainerController.kt | 1 + .../sample-app/src/main/AndroidManifest.xml | 8 ++ .../oraltrainer/sample/MainActivity.kt | 33 +++++++- .../sample/TrainingPlaybackService.kt | 79 +++++++++++++++++++ .../res/drawable/ic_notification_play.xml | 9 +++ .../src/main/res/values-zh/strings.xml | 3 + .../src/main/res/values/strings.xml | 3 + 8 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 android/sample-app/src/main/java/cn/learningpad/oraltrainer/sample/TrainingPlaybackService.kt create mode 100644 android/sample-app/src/main/res/drawable/ic_notification_play.xml diff --git a/android/oral-trainer-sdk/src/main/AndroidManifest.xml b/android/oral-trainer-sdk/src/main/AndroidManifest.xml index fbb2ef8..6622c6b 100644 --- a/android/oral-trainer-sdk/src/main/AndroidManifest.xml +++ b/android/oral-trainer-sdk/src/main/AndroidManifest.xml @@ -1,3 +1,5 @@ + + diff --git a/android/oral-trainer-sdk/src/main/java/cn/learningpad/oraltrainer/sdk/OralTrainerController.kt b/android/oral-trainer-sdk/src/main/java/cn/learningpad/oraltrainer/sdk/OralTrainerController.kt index cabad2e..35b11b6 100644 --- a/android/oral-trainer-sdk/src/main/java/cn/learningpad/oraltrainer/sdk/OralTrainerController.kt +++ b/android/oral-trainer-sdk/src/main/java/cn/learningpad/oraltrainer/sdk/OralTrainerController.kt @@ -69,6 +69,7 @@ class OralTrainerController internal constructor( ) player = ExoPlayer.Builder(appContext) .setMediaSourceFactory(mediaSourceFactory) + .setWakeMode(C.WAKE_MODE_NETWORK) .build() .also { exoPlayer -> exoPlayer.repeatMode = Player.REPEAT_MODE_ALL diff --git a/android/sample-app/src/main/AndroidManifest.xml b/android/sample-app/src/main/AndroidManifest.xml index c2b6721..cfed37d 100644 --- a/android/sample-app/src/main/AndroidManifest.xml +++ b/android/sample-app/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ + + + + + = Build.VERSION_CODES.Q) { + startForeground( + NOTIFICATION_ID, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK, + ) + } else { + startForeground(NOTIFICATION_ID, notification) + } + return START_NOT_STICKY + } + + private fun buildNotification(): Notification { + val contentIntent = PendingIntent.getActivity( + this, + 0, + Intent(this, MainActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + PendingIntent.FLAG_IMMUTABLE, + ) + return Notification.Builder(this, CHANNEL_ID) + .setContentTitle(getString(R.string.training_playback_notification_title)) + .setContentText(getString(R.string.training_playback_notification_text)) + .setSmallIcon(R.drawable.ic_notification_play) + .setContentIntent(contentIntent) + .setOngoing(true) + .setCategory(Notification.CATEGORY_TRANSPORT) + .build() + } + + companion object { + private const val CHANNEL_ID = "training_playback" + private const val NOTIFICATION_ID = 1001 + + fun start(context: Context) { + val intent = Intent(context, TrainingPlaybackService::class.java) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + context.startForegroundService(intent) + } else { + context.startService(intent) + } + } + + fun stop(context: Context) { + context.stopService(Intent(context, TrainingPlaybackService::class.java)) + } + } +} diff --git a/android/sample-app/src/main/res/drawable/ic_notification_play.xml b/android/sample-app/src/main/res/drawable/ic_notification_play.xml new file mode 100644 index 0000000..ecb7c2f --- /dev/null +++ b/android/sample-app/src/main/res/drawable/ic_notification_play.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/sample-app/src/main/res/values-zh/strings.xml b/android/sample-app/src/main/res/values-zh/strings.xml index 1930ce0..093cefd 100644 --- a/android/sample-app/src/main/res/values-zh/strings.xml +++ b/android/sample-app/src/main/res/values-zh/strings.xml @@ -1,4 +1,7 @@ 八哥口语 + 训练播放 + 口语训练 + 正在后台播放 diff --git a/android/sample-app/src/main/res/values/strings.xml b/android/sample-app/src/main/res/values/strings.xml index fdb55f2..82d0987 100644 --- a/android/sample-app/src/main/res/values/strings.xml +++ b/android/sample-app/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ MynaTalk + Training playback + Oral training + Playing in the background