web-dev-qa-db-fra.com

Comment ouvrir une activité (appel VoIP entrant) dans Android 10

Dans Android 10, de nouvelles restrictions s'appliquent aux applications. Nous ne pouvons plus démarrer une activité à partir de l'arrière-plan. Bien que cela puisse convenir à la majorité des applications, c'est un coup fatal pour les applications voip qui ont besoin pour afficher un appel entrant après l'arrivée d'une notification Push.

Selon cela https://developer.Android.com/guide/components/activities/background-starts il y a une liste de conditions qui peuvent être remplies pour permettre encore l'ouverture d'une activité, mais tbh je le fais ne comprends pas tout à fait (non-anglais ici).

Ce que je sais vraiment, c'est:

  • Je n'ai aucune activité, tâche, backstack, etc.

  • L'application NE FONCTIONNE PAS MÊME

Ce que je dois réaliser:

  • Le service FCM de l'application reçoit un Push de notre serveur et présentera l'écran des appels entrants (sur l'écran de verrouillage et tout - comme il l'a fait avec Android 9 et ci-dessous)

Que puis-je faire pour ouvrir une activité pour un appel VoIP entrant dans Android 10? Sur l'écran de verrouillage et tout, tout comme un utilisateur normal s'attendrait d'une application PHONE.

Merci d'avance pour tout indice.

7
Grisgram

Vous devez demander une autorisation "dessiner sur une autre application", vous pouvez alors le faire comme les versions précédentes

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            if (!Settings.canDrawOverlays(this)) {
                RequestPermission();

        }
        }

    private void RequestPermission() {
        // Check if Android P or higher
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // Show alert dialog to the user saying a separate permission is needed
            // Launch the settings activity if the user prefers
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                    Uri.parse("package:" + BuildConfig.APPLICATION_ID));
            startActivityForResult(intent, 
            ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
        }
     }
0
Dinil ps