ฉันได้ทำการตรวจสอบและแบ่งปันผลลัพธ์ของฉันที่นี่ซึ่งอาจเป็นประโยชน์สำหรับคนอื่น ๆ
ขั้นแรกเราสามารถตรวจสอบว่าตัวเลือก MockSetting เปิดอยู่หรือไม่
public static boolean isMockSettingsON(Context context) {
if (Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"))
return false;
else
return true;
}
อย่างที่สองเราสามารถตรวจสอบได้ว่ามีแอพอื่น ๆ ในอุปกรณ์ที่ใช้android.permission.ACCESS_MOCK_LOCATION
(แอปปลอมแปลงตำแหน่ง) หรือไม่
public static boolean areThereMockPermissionApps(Context context) {
int count = 0;
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);
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())) {
count++;
}
}
}
} catch (NameNotFoundException e) {
Log.e("Got exception " , e.getMessage());
}
}
if (count > 0)
return true;
return false;
}
หากทั้งสองวิธีข้างต้นครั้งแรกและครั้งที่สองเป็นจริงก็มีโอกาสดีที่สถานที่นั้นอาจถูกปลอมแปลงหรือปลอม
ตอนนี้คุณสามารถหลีกเลี่ยงการปลอมแปลงได้โดยใช้ API ของ Location Manager
เราสามารถลบผู้ให้บริการทดสอบก่อนที่จะขอการอัปเดตตำแหน่งจากทั้งผู้ให้บริการ (เครือข่ายและ GPS)
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
Log.d(TAG ,"Removing Test providers")
lm.removeTestProvider(LocationManager.GPS_PROVIDER);
} catch (IllegalArgumentException error) {
Log.d(TAG,"Got exception in removing test provider");
}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
ฉันได้เห็นว่า removeTestProvider (~) ทำงานได้ดีมากกับ Jelly Bean และเวอร์ชันต่อไป ดูเหมือนว่า API นี้จะไม่น่าเชื่อถือจนถึง Ice Cream Sandwich