mirror of
https://github.com/nextcloud/android.git
synced 2024-11-24 14:15:44 +03:00
Fix foreground service on Android 14
Signed-off-by: alperozturk <alper_ozturk@proton.me>
This commit is contained in:
parent
824772c247
commit
a87678a79e
5 changed files with 45 additions and 9 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue