Як почати діяльність з фону в 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?


Будь-яке правильне рішення?
Vishal Patel

Щось дізнаєтесь?
WorieN

Ви знайшли рішення?
Hamza Ezzaydia

Відповіді:


4

Не впевнений, чи правильно це зробити так, але мені не вистачило часу (додаток призначений лише для внутрішнього використання компанії).

Я використовував дозволи:

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

і тоді кожен користувач повинен перейти до налаштування -> дозволу програми, а потім встановити прапорець у розширених налаштуваннях функції "показати програму над іншими"

Вибачте за моє англійське чи не зовсім правильне рішення, але воно спрацювало, так що виправлення для мене добре.

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


3

Як ви згадали, Обмеження щодо запуску діяльності з фону

Зазначено, що

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

Вони також згадували у своїй записці те, що.

Примітка. Для запуску заходів додаток, що працює на передньому плані, як і раніше вважається "у фоновому режимі"

Це означає, що якщо ви використовуєте послугу переднього плану для запуску діяльності, вона все ще вважає, що додаток знаходиться у фоновому режимі і не запускатиме активність у додатку.

Рішення. По-перше, ви не можете запустити додаток, якщо він працює у фоновому режимі від Android 10 (рівень API 29) і вище. Вони запропонували новий спосіб подолання такої поведінки, який полягає в тому, що замість виклику програми ви можете показувати сповіщення високого пріоритету з наміром на весь екран .

Повноекранний намір поводиться так, як якщо екран вашого пристрою вимкнено, він запустить активність у вашому додатку, яку ви бажали. але якщо ваш додаток знаходиться у фоновому режимі, а екран увімкнено, він просто відображатиме сповіщення. Якщо натиснути на сповіщення, воно відкриє ваш додаток.

Для отримання додаткової інформації про Повідомлення з високим пріоритетом та намір на весь екран ви можете перевірити його тут. Відображайте сповіщення, що залежать від часу


2

Ви повинні включити до AndroidManifest.xml нижче дозволу.

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

Я також стикаюся з цим питанням, але це рішення не працює для мене
Rohit Sharma

@RohitSharma знайшов вирішення цієї проблеми ще? або все ще чекають якогось дива.
asadullah

Все ще стикаючись з цим питанням, я не знайшов ідеального рішення для цього.
Рохіт Шарма

Ви знайшли рішення?
Hamza Ezzaydia
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.