android gps杂乱分析
16lz
2021-01-23
在上层调用locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))时返回了false,追了一下代码看看,以下是
在LocationManagerService.java中
private void _loadProvidersLocked() { // Attempt to load "real" providers first if(GpsLocationProvider.isSupported()){ //调试返回空,也就是说isSupported为false // Create a gps location provider GpsLocationProvider gpsProvider = new GpsLocationProvider(mContext, this); mGpsStatusProvider = gpsProvider.getGpsStatusProvider(); mNetInitiatedListener = gpsProvider.getNetInitiatedListener(); addProvider(gpsProvider); mGpsLocationProvider = gpsProvider; }
GpsLocationProvider.isSupported()决定是否支持GPS,而这个方法实现在GpsLocationProvider.java中
public static boolean isSupported() { return native_is_supported(); }向下就是调用JNI层的接口了,
{"native_is_supported", "()Z", (void*)android_location_GpsLocationProvider_is_supported},
static jboolean android_location_GpsLocationProvider_is_supported(JNIEnv* env, jclass clazz) { return (sGpsInterface != NULL || get_gps_interface() != NULL);}
sGpsInterface是gps的接口,get_gps_interface()也是在这个文件中定义的,gps_get_interface函数属于HAL层的调用static const GpsInterface* get_gps_interface() { int err; hw_module_t* module; const GpsInterface* interface = NULL; err = hw_get_module(GPS_HARDWARE_MODULE_ID, (hw_module_t const**)&module); if (err == 0) { hw_device_t* device; err = module->methods->open(module, GPS_HARDWARE_MODULE_ID, &device); if (err == 0) { gps_device_t* gps_device = (gps_device_t *)device; interface = gps_device->get_gps_interface(gps_device); } }get_gps_interface(devices)
未完
更多相关文章
- Android Studio学习:简单控件:Button控件的点击、长按函数重写
- Android 打印函数调用堆栈调试
- Android静态安全检测 -> 敏感函数调用风险
- Android中调用系统函数查找联系人
- Android getActionBar() 函数总是返回 null 的解决
- 【Android】简单的接口回调
- 【APP】微信接口对Android与IOS验证方式的差异