每次我运行下面的代码时,日志会吐出“无位置”。我不知道我哪里出错了。
我在清单中启用了位置服务,如下所示:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
我应该指出,我尝试在我的nexus 4(API 22)和虚拟设备(API 16,21,22)上运行此应用程序,但无济于事。
public class MainActivity extends Activity implements LocationListener {
LocationManager locationManager;
String provider;
Location location;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
provider = locationManager.getBestProvider(new Criteria(), false);
try {
location = locationManager.getLastKnownLocation(provider);
} catch (SecurityException e) {
Log.d("SE", e.getMessage());
}
if (location != null) {
Log.i("Location Info", "Location achieved!");
} else {
Log.i("Location Info", "No location :(");
}
}
我将不胜感激任何帮助。
答案 0 :(得分:2)
getLastKnownLocation()
将始终返回null
,除非设备上的某个应用最近使用特定的位置提供商请求了位置更新。
使用getLastKnownLocation()
:
当您对某个地点感兴趣时,如果有一个地方很方便,但如果没有它就可以生活,或者
作为优化,如果requestLocationUpdates()
返回getLastKnownLocation()
或您认为太旧的null
,则使用Location
有关何时在LocationManager
上使用各种方法的更多指导,请参阅the documentation。
答案 1 :(得分:1)
因为并不总是最后一个已知的位置。如果您想确保获得位置,请注册更新并等待确定位置。网络将很快到来,GPS可能需要一段时间。虽然两者都有失败的机会,例如,如果你没有连接到wifi /蜂窝,即使网络也会失败,如果GPS无法看到足够的卫星,GPS将会失败。