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!
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
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
}
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) {
}
}