Android LBS系列01 使用Location Manager

Using the Location Manager

 

在manifest中展开权力设置

  要动Android位置服务,需要安装ACCESS_COARSE_LOCATION或者ACCESS_FINE_LOCATION权限。

  如果权力没有装,将会晤以运作时抛来一个
SecurityException异常。

  如果单待依据网络的一定,可以仅声明ACCESS_COARSE_LOCATION权力;更加纯粹的GPS定位要声明 ACCESS_FINE_LOCATION 权限。需要留意的是后者曾包含了前者。

  另外,一经应用被使了因网络的定点,还要声明网络权限。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

 

博LocationManager的一个引用

  LocationManager 是Android位置服务应用中一个生死攸关的切近。

  和其它系统服务类似,可以由此调用 getSystemService() 方法获得一个援。

  如果你的运用希望于前景进程面临收到位置更新,通常要以Activity的onCreate()方法被调用这个法:

LocationManager locationManager =
        (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

 

选择Location Provider

  现在的Android都得经强底层技术取得位置的换代,这些底层技术于架空成LocationProvider 类的对象。

  各种Location
Provider拥有不同的特性,比如固定时间、精确度、能消耗等。

  一般的话,高精确度的Location
Provider,比如GPS,需要再次增长之原则性时间,相比于小精确度的基于网络的办法吧。

  获得GPS provider:

LocationProvider provider =
        locationManager.getProvider(LocationManager.GPS_PROVIDER);

 

  可以设置有些正式,让Android系统选择一个太相仿的匹配,从而选出location
provider。

  注意到这些标准或者得不交外provider,这时候返回一个null。

  

// Retrieve a list of location providers that have fine accuracy, no monetary cost, etc
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setCostAllowed(false);
...
String providerName = locManager.getBestProvider(criteria, true);

// If no suitable provider is found, null is returned.
if (providerName != null) 
{
   ...
}

 

承认Location Provider是否要能

  一些location
provider可以当设置(Settings)中关闭,比如GPS。实践备受极其好先证实一下靶location
provider是否如能,可以通过调用isProviderEnabled() 方法实现。

  如果location
provider是disabled状态,你可以提供被用户一个机会错过当装中开拓它,通过启动一个action为ACTION_LOCATION_SOURCE_SETTINGS 的Intent来实现。

 

@Override
protected void onStart() 
{
    super.onStart();

    // This verification should be done during onStart() because the system calls
    // this method when the user returns to the activity, which ensures the desired
    // location provider is enabled each time the activity resumes from the stopped state.
    LocationManager locationManager =
            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    final boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

    if (!gpsEnabled) 
    {
        // Build an alert dialog here that requests that the user enable
        // the location services, then when the user clicks the "OK" button,
        // call enableLocationSettings()
    }
}

private void enableLocationSettings() 
{
    Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivity(settingsIntent);
}

 

参考资料:

  LocationManager

  http://developer.android.com/reference/android/location/LocationManager.html

  LocationProvider

  http://developer.android.com/reference/android/location/LocationProvider.html

  Using the Location Manager:

  http://developer.android.com/training/basics/location/locationmanager.html

 

相关文章