Wie starte ich eine Aktivität aus dem Hintergrund in Android 10?

12

Ich baue eine Android-App, in der ich eine Aktivität aus dem Hintergrund starten muss. Ich verwende einen ForegroundStarter, der den Service erweitert, um dies zu erreichen. Ich habe eine Aktivität Adscreen.class, die ich von meinem Vordergrunddienst ausführen muss. Die Aktivität Adscreen.class funktioniert auf allen Android-Versionen außer Android 10 einwandfrei (ausgehend vom Hintergrund).

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);

    }
}

Ich habe gelesen, dass es einige Einschränkungen beim Starten von Aktivitäten aus dem Hintergrund unter Android 10 gibt. Dieser Code scheint nicht mehr zu funktionieren. 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);

Gibt es Problemumgehungen, um eine Aktivität unter Android 10 im Hintergrund zu starten?

SK707
quelle
Irgendeine richtige Lösung?
Vishal Patel
Etwas herausfinden?
WorieN
Haben Sie eine Lösung gefunden?
Hamza Ezzaydia

Antworten:

4

Ich bin mir nicht sicher, ob es richtig ist, es auf diese Weise zu tun, aber ich hatte nicht genug Zeit (App ist nur für den unternehmensinternen Gebrauch).

Ich habe Berechtigungen verwendet:

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

und dann muss jeder Benutzer zu Einstellung -> Berechtigungen der App gehen und dann in den erweiterten Einstellungen das Kontrollkästchen für die Funktion "App über andere anzeigen" aktivieren.

Entschuldigung für mein Englisch oder nicht genau die richtige Lösung, aber es hat funktioniert, also guter Hotfix für mich.

Auf Pixel 4 sieht es so aus: Geben Sie hier die Bildbeschreibung ein

kamest
quelle
3

Wie Sie bereits erwähnt haben Einschränkungen beim Starten von Aktivitäten im Hintergrund

Es wird angegeben, daß

Android 10 (API-Level 29) und höhere Einschränkungen beschränken, wann Apps Aktivitäten starten können, wenn die App im Hintergrund ausgeführt wird.

Sie erwähnten auch in ihrer Notiz, dass.

Hinweis: Zum Starten von Aktivitäten wird eine App, die einen Vordergrunddienst ausführt, weiterhin als "im Hintergrund" betrachtet.

Wenn Sie also einen Vordergrunddienst zum Starten einer Aktivität verwenden, wird weiterhin berücksichtigt, dass sich die App im Hintergrund befindet und keine App-Aktivität gestartet wird.

Lösung: Erstens können Sie die App nicht starten, wenn sie im Hintergrund von Android 10 (API-Stufe 29) und höher ausgeführt wird. Sie haben eine neue Möglichkeit bereitgestellt, um dieses Verhalten zu überwinden: Anstatt die App aufzurufen, können Sie eine Benachrichtigung mit hoher Priorität mit einem anzeigen Vollbildabsicht anzeigen .

Die Vollbild-Absicht verhält sich so, als ob der Bildschirm Ihres Geräts ausgeschaltet ist. Dadurch wird die gewünschte App-Aktivität gestartet. Wenn sich Ihre App jedoch im Hintergrund befindet und der Bildschirm eingeschaltet ist, wird nur eine Benachrichtigung angezeigt. Wenn Sie auf die Benachrichtigung klicken, wird Ihre App geöffnet.

Weitere Informationen zu Benachrichtigungen mit hoher Priorität und Vollbild-Absichten finden Sie hier. Zeitkritische Benachrichtigungen anzeigen

Muhammad Farhan
quelle
2

Sie sollten AndroidManifest.xml unter der Berechtigung einfügen.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
mimu120
quelle
Ich bin auch mit diesem Problem konfrontiert, aber diese Lösung funktioniert nicht für mich
Rohit Sharma
@RohitSharma hat schon eine Lösung für dieses Problem gefunden? oder immer noch auf ein Wunder warten.
Asadullah
Da ich immer noch mit diesem Problem konfrontiert bin, habe ich keine perfekte Lösung dafür gefunden.
Rohit Sharma
Haben Sie eine Lösung gefunden?
Hamza Ezzaydia