android:LocationManager详解(-)

来源:互联网 发布:陈风暴烈酒 知乎 编辑:程序博客网 时间:2024/05/21 11:16

通过在网络上查找相关资料以及阅读相关源码,总结如下:

这个类提供访问系统位置服务的访问。这些服务允许应用程序获得定期更新设备的地理位置。

点击下载源码:一个简单的demo,从网络中获取GPS信息

1、LocationManager : provider

 public static final String NETWORK_PROVIDER = "network"; 相关权限: android.permission.ACCESS_COARSE_LOCATION android.permission.ACCESS_FINE_LOCATION
  public static final String GPS_PROVIDER = "gps";  相关权限:  android.permission.ACCESS_FINE_LOCATION
   public static final String PASSIVE_PROVIDER = "passive";   相关权限:   android.permission.ACCESS_FINE_LOCATION

LocationManager.GPS_PROVIDER:GPS,精度高,速度慢,耗电对,而且可能因为天气原因或者障碍物而无法获取卫星信息,另外设备可能没有GPS模块(比如说一些平板);
LocationManager.NETWORK_PROVIDER:通过网络获取定位信息,精度低,网络通畅时速度快,耗电少,不依赖GPS模块。

2、获得LocationManager实例

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

3、LocationListener:位置监听器接口

protected final LocationListener locationListener=new LocationListener() {            // Provider的在可用、暂时不可用和无服务三个状态直接切换时触发此函数            @Override            public void onStatusChanged(String provider, int status, Bundle extras) {                // TODO Auto-generated method stub            }            //  Provider被enable时触发此函数,比如GPS被打开            @Override            public void onProviderEnabled(String provider) {                // TODO Auto-generated method stub            }            // Provider被disable时触发此函数,比如GPS被关闭            @Override            public void onProviderDisabled(String provider) {                // TODO Auto-generated method stub            }            //当坐标改变时触发此函数            @Override            public void onLocationChanged(Location location) {                // TODO Auto-generated method stub                mlocation=location;            }    };

4、获取所有的Provider

//获取当前设备所有的Provider        List<String> allprovides=locationManager.getAllProviders();        for(String allprovide:allprovides){            Log.i("Test", allprovide);        }

5、绑定监听与解绑

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);locationManager.removeUpdates(locationListener);

6、注意事项

在使用网络获取GPS时,需要先判断基于网络的位置服务是否开启了。locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

7、一个简单的例子

package com.example.locationmanagerdemo;import java.util.List;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.util.Log;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {    protected LocationManager  locationManager;    protected Location mlocation;    TextView gpstext;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        gpstext=(TextView) findViewById(R.id.gpstext);        locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);        //首先判断网络是否可用        if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);        }else{            //将手机位置服务中--基于网络的位置服务关闭后,则获取不到数据            showgps("NETWORK_PROVIDER不可用,无法获取GPS信息!");        }        //获取当前设备说有的Provider        List<String> allprovides=locationManager.getAllProviders();        for(String allprovide:allprovides){            Log.i("Test", allprovide);        }    }    protected final LocationListener locationListener=new LocationListener() {            // Provider的在可用、暂时不可用和无服务三个状态直接切换时触发此函数            @Override            public void onStatusChanged(String provider, int status, Bundle extras) {                // TODO Auto-generated method stub            }            //  Provider被enable时触发此函数,比如GPS被打开            @Override            public void onProviderEnabled(String provider) {                // TODO Auto-generated method stub            }            // Provider被disable时触发此函数,比如GPS被关闭            @Override            public void onProviderDisabled(String provider) {                // TODO Auto-generated method stub            }            //当坐标改变时触发此函数            @Override            public void onLocationChanged(Location location) {                // TODO Auto-generated method stub                mlocation=location;                //解除监听                locationManager.removeUpdates(locationListener);                String  gpsinfo="GPS: Latitude="+mlocation.getLatitude()+"   Longitude="+mlocation.getLongitude();                showgps(gpsinfo);            }    };    public void showgps(String info){        gpstext.setText(info);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

点击下载源码:一个简单的demo,从网络中获取GPS信息

1 0
原创粉丝点击