Fix foreground service on Android 14

Signed-off-by: alperozturk <alper_ozturk@proton.me>
This commit is contained in:
alperozturk 2023-11-21 11:44:48 +01:00 committed by Andy Scherzinger
parent 824772c247
commit a87678a79e
5 changed files with 45 additions and 9 deletions

View file

@ -72,6 +72,9 @@
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- Needed for Android 14 (API level 34) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<!-- Some Chromebooks don't support touch. Although not essential, <!-- Some Chromebooks don't support touch. Although not essential,
it's a good idea to explicitly include this declaration. --> it's a good idea to explicitly include this declaration. -->
@ -378,15 +381,19 @@
android:exported="false" /> android:exported="false" />
<service <service
android:name=".files.services.FileDownloader" android:name=".files.services.FileDownloader"
android:foregroundServiceType="dataSync"
android:exported="false" /> android:exported="false" />
<service <service
android:name="com.nextcloud.client.files.downloader.FileTransferService" android:name="com.nextcloud.client.files.downloader.FileTransferService"
android:foregroundServiceType="dataSync"
android:exported="false" /> android:exported="false" />
<service <service
android:name=".files.services.FileUploader" android:name=".files.services.FileUploader"
android:foregroundServiceType="dataSync"
android:exported="false" /> android:exported="false" />
<service <service
android:name="com.nextcloud.client.media.PlayerService" android:name="com.nextcloud.client.media.PlayerService"
android:foregroundServiceType="mediaPlayback"
android:exported="false" /> android:exported="false" />
<activity <activity

View file

@ -22,6 +22,8 @@ package com.nextcloud.client.files.downloader
import android.app.Service import android.app.Service
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.ServiceInfo
import android.os.Build
import android.os.IBinder import android.os.IBinder
import com.nextcloud.client.account.User import com.nextcloud.client.account.User
import com.nextcloud.client.core.AsyncRunner import com.nextcloud.client.core.AsyncRunner
@ -33,6 +35,7 @@ import com.nextcloud.client.network.ConnectivityService
import com.nextcloud.client.notifications.AppNotificationManager import com.nextcloud.client.notifications.AppNotificationManager
import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.FileDataStorageManager
import com.owncloud.android.datamodel.UploadsStorageManager import com.owncloud.android.datamodel.UploadsStorageManager
import com.owncloud.android.files.services.FileDownloader
import dagger.android.AndroidInjection import dagger.android.AndroidInjection
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
@ -107,11 +110,19 @@ class FileTransferService : Service() {
} }
if (!isRunning) { if (!isRunning) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startForeground(
AppNotificationManager.TRANSFER_NOTIFICATION_ID,
notificationsManager.buildDownloadServiceForegroundNotification(),
ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
)
} else {
startForeground( startForeground(
AppNotificationManager.TRANSFER_NOTIFICATION_ID, AppNotificationManager.TRANSFER_NOTIFICATION_ID,
notificationsManager.buildDownloadServiceForegroundNotification() notificationsManager.buildDownloadServiceForegroundNotification()
) )
} }
}
val request: Request = intent.getParcelableExtra(EXTRA_REQUEST)!! val request: Request = intent.getParcelableExtra(EXTRA_REQUEST)!!
val transferManager = getTransferManager(request.user) val transferManager = getTransferManager(request.user)

View file

@ -22,7 +22,9 @@ package com.nextcloud.client.media
import android.app.PendingIntent import android.app.PendingIntent
import android.app.Service import android.app.Service
import android.content.Intent import android.content.Intent
import android.content.pm.ServiceInfo
import android.media.AudioManager import android.media.AudioManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.IBinder import android.os.IBinder
import android.widget.MediaController import android.widget.MediaController
@ -167,11 +169,16 @@ class PlayerService : Service() {
notificationBuilder.setContentTitle(ticker) notificationBuilder.setContentTitle(ticker)
notificationBuilder.setContentText(content) notificationBuilder.setContentText(content)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_MEDIA) notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_MEDIA)
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startForeground(R.string.media_notif_ticker, notificationBuilder.build(), ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK)
} else {
startForeground(R.string.media_notif_ticker, notificationBuilder.build()) startForeground(R.string.media_notif_ticker, notificationBuilder.build())
}
isRunning = true isRunning = true
} }

View file

@ -28,8 +28,10 @@ import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ServiceInfo;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.os.Binder; import android.os.Binder;
import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
@ -200,7 +202,11 @@ public class FileDownloader extends Service
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
Log_OC.d(TAG, "Starting command with id " + startId); Log_OC.d(TAG, "Starting command with id " + startId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startForeground(FOREGROUND_SERVICE_ID, mNotification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
} else {
startForeground(FOREGROUND_SERVICE_ID, mNotification); startForeground(FOREGROUND_SERVICE_ID, mNotification);
}
if (intent == null || !intent.hasExtra(EXTRA_USER) || !intent.hasExtra(EXTRA_FILE)) { if (intent == null || !intent.hasExtra(EXTRA_USER) || !intent.hasExtra(EXTRA_FILE)) {
Log_OC.e(TAG, "Not enough information provided in intent"); Log_OC.e(TAG, "Not enough information provided in intent");

View file

@ -36,6 +36,7 @@ import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ServiceInfo;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.os.Binder; import android.os.Binder;
import android.os.Build; import android.os.Build;
@ -304,7 +305,11 @@ public class FileUploader extends Service
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
Log_OC.d(TAG, "Starting command with id " + startId); Log_OC.d(TAG, "Starting command with id " + startId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
startForeground(FOREGROUND_SERVICE_ID, mNotification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
} else {
startForeground(FOREGROUND_SERVICE_ID, mNotification); startForeground(FOREGROUND_SERVICE_ID, mNotification);
}
if (intent == null) { if (intent == null) {
Log_OC.e(TAG, "Intent is null"); Log_OC.e(TAG, "Intent is null");
@ -602,7 +607,7 @@ public class FileUploader extends Service
/** /**
* Core upload method: sends the file(s) to upload WARNING: legacy code, must be in sync with @{{@link * Core upload method: sends the file(s) to upload WARNING: legacy code, must be in sync with @{{@link
* FilesUploadWorker#upload(UploadFileOperation, User)} * FilesUploadWorker upload(UploadFileOperation, User)}
* *
* @param uploadKey Key to access the upload to perform, contained in mPendingUploads * @param uploadKey Key to access the upload to perform, contained in mPendingUploads
*/ */