下午一直在报这个错误,坑了一下午:
java.lang.UnsatisfiedLinkError: No implementation found for boolean com.baidu.platform.comjni.tools.JNITools.CoordinateEncryptEx(float, float, java.lang.String, java.lang.Object) (tried Java_com_baidu_platform_comjni_tools_JNITools_CoordinateEncryptEx and Java_com_baidu_platform_comjni_tools_JNITools_CoordinateEncryptEx__FFLjava_lang_String_2Ljava_lang_Object_2)
at com.baidu.platform.comjni.tools.JNITools.CoordinateEncryptEx(Native Method)
原因:
demo里面需要初始化这些代码 // 初始化定位sdk,建议在Application中创建 LocationService
locationService = new LocationService(getApplicationContext());
Vibrator mVibrator
=(Vibrator)getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE);
SDKInitializer.initialize(getApplicationContext());
实际只需加入这句:
SDKInitializer.initialize(getApplicationContext())
报错解决。
背景:
百度地图,通过基站定位(即开启手机4G流量)会产生位置漂移
原因:百度地图在静止时,容易产生位置漂移,Google定位则无此问题。
于是尝试通过百度Demo提供的平滑策略方法进行修正:
/***
* 平滑策略代码实现方法,主要通过对新定位和历史定位结果进行速度评分,
* 来判断新定位结果的抖动幅度,如果超过经验值,则判定为过大抖动,进行平滑处理,若速度过快,
* 则推测有可能是由于运动速度本身造成的,则不进行低速平滑处理 ╭(●`∀´●)╯
*
* @param location
*/
private BDLocation Algorithm(BDLocation location) {
float[] EARTH_WEIGHT = {0.1f,0.2f,0.4f,0.6f,0.8f}; // 推算计算权重_地球
double curSpeed = 0;
if (locationList.isEmpty() || locationList.size() < 2) {
LocationEntity temp = new LocationEntity();
temp.location = location;
temp.time = System.currentTimeMillis();
// locData.putInt("iscalculate", 0);
locationList.add(temp);
} else {
if (locationList.size() > 5)
locationList.removeFirst();
double score = 0;
for (int i = 0; i < locationList.size(); ++i) {
LatLng lastPoint = new LatLng(locationList.get(i).location.getLatitude(),
locationList.get(i).location.getLongitude());
LatLng curPoint = new LatLng(location.getLatitude(), location.getLongitude());
double distance = DistanceUtil.getDistance(lastPoint, curPoint);
curSpeed = distance / (System.currentTimeMillis() - locationList.get(i).time) / 1000;
score += curSpeed * EARTH_WEIGHT[i];
}
if (score > 0.00000999 && score < 0.00005) { // 经验值,开发者可根据业务自行调整,也可以不使用这种算法
location.setLongitude(
(locationList.get(locationList.size() - 1).location.getLongitude() + location.getLongitude())
/ 2);
location.setLatitude(
(locationList.get(locationList.size() - 1).location.getLatitude() + location.getLatitude())
/ 2);
// locData.putInt("iscalculate", 1);
} else {
// locData.putInt("iscalculate", 0);
}
LocationEntity newLocation = new LocationEntity();
newLocation.location = location;
newLocation.time = System.currentTimeMillis();
locationList.add(newLocation);
}
return location;
}
结果double distance = DistanceUtil.getDistance(lastPoint, curPoint);使用时一直报UnsatisfiedLinkError
网上搜说是,jniLib下的.so文件缺失,
搞了一下午.so替换,然并卵。。。。。。
最终参考demo,发现是SDK未注册导致的,
在Application中加入这一句:
SDKInitializer.initialize(getApplicationContext())
不再崩溃。