web-dev-qa-db-fra.com

Comment lire l'application de localisation fictive sélectionnée dans Android M - API 23

J'essaie de trouver un moyen de lire les nouveaux paramètres des emplacements fictifs dans Android M.

Avant Android M, le paramètre de localisation fictif était une option à bascule appelée "utiliser des lieux fictifs", lisible avec ce paramètre: Settings.Secure.ALLOW_MOCK_LOCATION

Avec Android M, le paramètre de localisation fictive est une application à sélectionner pour les emplacements fictifs. Il s’agit donc d’une liste multi-éléments, l’élément sélectionné pouvant être "aucun".

Ce fil a une solution pour déterminer la source de la mise à jour de l'emplacement lorsque vous écoutez des emplacements, mais malheureusement, j'aimerais lire le paramètre lui-même: Comment rechercher un emplacement factice dans Android Marshmallow?

J'aimerais savoir s'il existe une application sélectionnée pour les emplacements fictifs ou non, et idéalement pour l'application sélectionnée également. Toute idée sur la façon de le faire est la bienvenue!

12
androidseb

Pour ceux qui tentent de faire cela en utilisant ADB, voici les commandes pour obtenir et configurer l'application fictive:

Autoriser l'application pour une maquette de locaiton

adb Shell appops set <PACKAGE> Android:mock_location allow

Suppression de l'application pour l'emplacement fictif

adb Shell appops set <PACKAGE> Android:mock_location deny

Vérifier si l'application est définie pour l'emplacement fictif

adb Shell appops get <PACKAGE> Android:mock_location
2
Pablo Baxter

Si vous souhaitez détecter si des emplacements fictifs sont utilisés actuellement ou récemment.

    val manager = getSystemService(Context.LOCATION_SERVICE) as? LocationManager
    if (manager?.getLastKnownLocation(LocationManager.GPS_PROVIDER)?.isFromMockProvider == true) {
    // Mock locations are/were used
    }
0
mobo
  PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packages =
            pm.getInstalledApplications(PackageManager.GET_META_DATA);

    for (ApplicationInfo applicationInfo : packages) {
        try {
            PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName,
                    PackageManager.GET_PERMISSIONS);

            // Get Permissions
            String[] requestedPermissions = packageInfo.requestedPermissions;

            if (requestedPermissions != null) {
                for (int i = 0; i < requestedPermissions.length; i++) {
                    if (requestedPermissions[i].equals("Android.permission.ACCESS_MOCK_LOCATION")
                            && !applicationInfo.packageName.equals(context.getPackageName())) {
                        //we get Package name here
                    }
                }
            }
        } catch (PackageManager.NameNotFoundException e) {

        }
    }
0
Sanket Parchande