and*_*seb 13 android android-6.0-marshmallow
我试图找到一种方法来读取Android M中模拟位置的新设置.
在Android M之前,模拟位置设置是一个名为"use mock locations"的切换选项,使用此设置可读取: Settings.Secure.ALLOW_MOCK_LOCATION
使用Android M,模拟位置设置是一个用于选择模拟位置的应用程序,因此它是一个多元素列表,其中所选元素可以是"无".
该线程有一个解决方案,用于在侦听位置时确定位置更新的来源,但不幸的是我想阅读设置本身: 如何检查Android Marshmallow中的模拟位置?
我想知道是否有一个选定的模拟位置的应用程序,理想情况下也是所选的应用程序.欢迎任何有关如何做到这一点的想法!
Mar*_*lon 21
好的挖掘Android开发者网站,这就是我想出的.您必须使用AppOpsManager. checkOp("android:mock_location", "yourUID", "com.your.package.name")
我想你可以通过更改包名来检查是否启用了不同的应用程序.
public boolean isMockLocationEnabled(){
boolean isMockLocation = false;
try {
//if marshmallow
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
AppOpsManager opsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
isMockLocation = (opsManager.checkOp(AppOpsManager.OPSTR_MOCK_LOCATION, android.os.Process.myUid(), BuildConfig.APPLICATION_ID)== AppOpsManager.MODE_ALLOWED);
} else {
// in marshmallow this will always return true
isMockLocation = !android.provider.Settings.Secure.getString(mContext.getContentResolver(), "mock_location").equals("0");
}
} catch (Exception e) {
return isMockLocation;
}
return isMockLocation;
}
Run Code Online (Sandbox Code Playgroud)
对于那些尝试使用ADB进行此操作的人,以下是用于获取和设置模拟应用程序的命令:
允许应用进行模拟定位
adb shell appops set <PACKAGE> android:mock_location allow
Run Code Online (Sandbox Code Playgroud)
删除应用以获取模拟位置
adb shell appops set <PACKAGE> android:mock_location deny
Run Code Online (Sandbox Code Playgroud)
检查应用是否设置了模拟位置
adb shell appops get <PACKAGE> android:mock_location
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13813 次 |
| 最近记录: |