android通过无线网络定位的有关问题(难道又是中国特色?)
android通过无线网络定位的问题(难道又是中国特色?)
做网络定位整整一天了,快崩溃了。严重怀疑是中国特色。
先说说我的步骤吧。
1,在‘设置‘--‘位置和安全‘里勾选使用无线网络,来激活NETWORK_PROVIDER.
也可以在代码里判断
if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
2,在manifest里添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3,写代码
LocationManager locationManager = null;
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); //高精度
criteria.setAltitudeRequired(false); //不要求海拔
criteria.setBearingRequired(false); //不要求方位
criteria.setCostAllowed(false); //不允许有话费
criteria.setPowerRequirement(Criteria.POWER_LOW); //低功耗
//provider的类型
String provider =LocationManager.NETWORK_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 0, 0,
locationListener);
}
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Log.d(TAG, "wwp onLocationChanged");
locationManager.removeUpdates(locationListener);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
Log.d(TAG, "wwp onProviderEnabled");
}
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d(TAG, "wwp onStatusChanged");
}
}
4,问题:
1)首先,locationManager.getLastKnownLocation会返回null。可能是没有保存过位置,返回null也可以理解。
2)而且onLocationChanged没被调用过,而onProviderEnabled是可以被调用的,说明listener设置没问题。
3)怀疑是手机的问题,换了一部手机,同样不行。换了第二部手机,奇迹出现了!!!!!!!!!!!!成功获得了
位置信息,只用了两三秒钟!!!!!!!!!
5,总结:
质疑精神是好的,但方向不对就容易钻牛角尖。拉不出baba怪地球没引力,失眠怪床歪是不行滴。
我的破手机,真像砸了它!
------解决思路----------------------
不同厂家把Android手机框架改得你已经无法用官方的标准去用了。
做网络定位整整一天了,快崩溃了。严重怀疑是中国特色。
先说说我的步骤吧。
1,在‘设置‘--‘位置和安全‘里勾选使用无线网络,来激活NETWORK_PROVIDER.
也可以在代码里判断
if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
2,在manifest里添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3,写代码
LocationManager locationManager = null;
locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); //高精度
criteria.setAltitudeRequired(false); //不要求海拔
criteria.setBearingRequired(false); //不要求方位
criteria.setCostAllowed(false); //不允许有话费
criteria.setPowerRequirement(Criteria.POWER_LOW); //低功耗
//provider的类型
String provider =LocationManager.NETWORK_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 0, 0,
locationListener);
}
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Log.d(TAG, "wwp onLocationChanged");
locationManager.removeUpdates(locationListener);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
Log.d(TAG, "wwp onProviderEnabled");
}
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d(TAG, "wwp onStatusChanged");
}
}
4,问题:
1)首先,locationManager.getLastKnownLocation会返回null。可能是没有保存过位置,返回null也可以理解。
2)而且onLocationChanged没被调用过,而onProviderEnabled是可以被调用的,说明listener设置没问题。
3)怀疑是手机的问题,换了一部手机,同样不行。换了第二部手机,奇迹出现了!!!!!!!!!!!!成功获得了
位置信息,只用了两三秒钟!!!!!!!!!
5,总结:
质疑精神是好的,但方向不对就容易钻牛角尖。拉不出baba怪地球没引力,失眠怪床歪是不行滴。
我的破手机,真像砸了它!
------解决思路----------------------
不同厂家把Android手机框架改得你已经无法用官方的标准去用了。