2015-12-04 64 views
0

每当我运行下面的代码时,日志吐出“无位置”。我不知道我哪里错了。无法获取用户位置android

我已经在清单中启用了定位服务,像这样:

<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 :("); 

    } 
} 

我将不胜感激任何帮助。

回答

2

getLastKnownLocation()将始终返回null,除非设备上的某个应用程序最近使用特定位置提供程序请求位置更新。

使用getLastKnownLocation()之一:

  • ,当你有兴趣在一个位置,如果一个碰巧是得心应手,但在其他方面可以生活离不开它,或

  • 作为优化,在您使用requestLocationUpdates()如果getLastKnownLocation()或者返回您认为太旧nullLocation

有关何时使用LocationManager上的各种方法的更多指导,请参阅the documentation

+0

解决了!谢谢(: – Frosty619

1

因为并不总是最后一个已知位置。如果您想确保获取位置,请注册更新并等待确定位置。网络会很快出现,GPS可能需要一段时间。尽管两者都有可能失败,例如,如果您未连接到WiFi /手机,即使网络连接失败,如果无法看到足够的卫星,GPS也会失败。

+0

解决了它!谢谢(: – Frosty619