Как начать задание с фона в Android 10?


12

Я создаю приложение для Android, где мне нужно начать деятельность из фона. Я использую ForegroundStarter, который расширяет Сервис для достижения этой цели. У меня есть активность Adscreen.class, которую мне нужно запустить из службы Foreground. Задание Adscreen.class прекрасно работает (начинается с фона) на всех версиях Android, кроме Android 10.

ForeGroundStarter.class

public class ForeGroundStarter extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }



    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("sK", "Inside Foreground");

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("sK", "Inside Foreground onStartCommand");
        Intent notificationIntent = new Intent(this, Adscreen.class);
        PendingIntent pendingIntent =
                PendingIntent.getActivity(this, 0, notificationIntent, 0);


        Notification notification =
                null;

        //Launching Foreground Services From API 26+

        notificationIntent = new Intent(this, Adscreen.class);
        pendingIntent =
                PendingIntent.getActivity(this, 0, notificationIntent, 0);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String NOTIFICATION_CHANNEL_ID = "com.currency.usdtoinr";
            String channelName = "My Background Service";
            NotificationChannel chan = null;
            chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
            chan.setLightColor(Color.BLUE);
            chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            assert manager != null;
            manager.createNotificationChannel(chan);

            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
            notification = notificationBuilder.setOngoing(true)
                    .setSmallIcon(R.drawable.nicon)
                    .setContentTitle("")
                    .setPriority(NotificationManager.IMPORTANCE_MIN)
                    .setCategory(Notification.CATEGORY_SERVICE)
                    .build();
            startForeground(2, notification);


            Intent dialogIntent = new Intent(this, Adscreen.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);
            Log.d("sk", "After startforeground executed");

        }



        else //API 26 and lower
            {
                notificationIntent = new Intent(this, Adscreen.class);
                pendingIntent =
                        PendingIntent.getActivity(this, 0, notificationIntent, 0);

                notification =
                        new Notification.Builder(this)
                                .setContentTitle("")
                                .setContentText("")
                                .setSmallIcon(R.drawable.nicon)
                                .setContentIntent(pendingIntent)
                                .setTicker("")
                                .build();

                startForeground(2, notification);
                Intent dialogIntent = new Intent(this, Adscreen.class);
                dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(dialogIntent);
            }




        return super.onStartCommand(intent, flags, startId);

    }
}

Я читал, что есть некоторые ограничения на запуск действий из фона на Android 10. Этот код, похоже, больше не работает. https://developer.android.com/guide/components/activities/background-starts

Intent dialogIntent = new Intent(this, Adscreen.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);

Какие-нибудь обходные пути, чтобы начать деятельность из фона на Android 10?


Любое правильное решение?
Вишал Патель

Узнать что-нибудь?
WorieN

Вы нашли решение?
Хамза Эззайдия

Ответы:


4

Не уверен, правильно ли это делать таким образом, но у меня не было достаточно времени (приложение предназначено только для внутреннего использования компанией).

Я использовал разрешения:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

а затем каждый пользователь должен перейти к настройке -> разрешения приложения и затем установить флажок в дополнительных настройках для функции «показать приложение поверх других»

Извините за мой английский или не совсем правильное решение, но это сработало, так что исправление для меня.

На Pixel 4 это будет выглядеть так: введите описание изображения здесь


3

Как вы упомянули Ограничения на начало деятельности из фона

Установлено, что

Android 10 (уровень API 29) и выше накладывают ограничения на то, когда приложения могут запускать действия, когда приложение работает в фоновом режиме.

Они также упомянули в своей записке, что это.

Примечание. В целях запуска операций приложение, выполняющее службу переднего плана, по-прежнему считается «в фоновом режиме».

Это означает, что если вы используете службу переднего плана для запуска действия, он по-прежнему считает, что приложение находится в фоновом режиме и не будет запускать действие приложения.

Решение. Во-первых, вы не можете запустить приложение, если оно работает в фоновом режиме с Android 10 (уровень API 29) и выше. Они предоставили новый способ преодоления этого поведения, заключающийся в том, что вместо вызова приложения вы можете показывать высокоприоритетное уведомление с полноэкранным режимом .

Полноэкранное задание ведет себя так, как будто экран вашего устройства выключен. Запустится приложение «Активность», которое вы хотели. но если ваше приложение работает в фоновом режиме, а экран включен, то оно просто покажет уведомление. Если вы нажмете на уведомление, то откроется ваше приложение.

Для получения дополнительной информации о приоритетных уведомлениях и полноэкранных намерениях вы можете проверить их здесь. Отображение чувствительных ко времени уведомлений.


2

Вы должны включить в AndroidManifest.xml ниже разрешения.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

я также сталкиваюсь с этой проблемой, но это решение не работает для меня
Рохит Шарма

@RohitSharma нашли какое-либо решение этой проблемы? или все еще жду какого-то чуда.
Асадулла

Все еще сталкиваясь с этой проблемой, я не нашел идеального решения для этого.
Рохит Шарма

Вы нашли решение?
Хамза Эззайдия
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.