android确定经纬度的小误区

来源:互联网 发布:通信协议json rpc 编辑:程序博客网 时间:2024/06/07 06:12

android LocationManager的使用

android提供LoacationManager类来获取自己的经纬度。也可以通过反向地理编码发送http给google返回一个确定值给自己再在解析显示到textview上(Geocoding API)。

首先需要申明权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission
android:name="android.permission.INTERNET" />

FINE权限对应的是GPS功能权限,
COARSE对应的是NETWORK权限,
Internet对应的是联网权限。

public class MainActivity extends AppCompatActivity {    @Bind(R.id.one_text)    TextView oneText;    private LocationManager locationManager;    private String provider;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);        //这里传入true表示启用的位置提供器都得到返回        List<String> providerList = locationManager.getProviders(true);        if (providerList.contains(LocationManager.GPS_PROVIDER)) {            provider = LocationManager.GPS_PROVIDER;        } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {            provider = LocationManager.NETWORK_PROVIDER;        } else {            Toast.makeText(this, "没有打开任何位置提供器", Toast.LENGTH_SHORT).show();            return;        }        /**        //如果直接拿GPS定位,这个Location很有肯能为Null.而出现空指针        //可能是BUG,GPS在室内,会为location或者很难找到        //而是用network则不会出现这个情况          */        Location location = locationManager.getLastKnownLocation(provider);        if (location != null) {            /**             * 这个lacation是空的             * Toast也不会弹出来,说明程序不运行进来,location是空的             */            Toast.makeText(this, "dadadaadadaadaddadadadada", Toast.LENGTH_SHORT).show();            showLocation(location);        }        //这个if也是要你检查权限,不加也能运行,但会红线提示而已        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {            return;        }        /**         * 四个参数,第一个是GPS/NETWORK,第二个是刷新时间(毫秒),第三个是刷新距离(米),第四个是接口实例         */ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, locationListener);   //调用GPS     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, locationListener);//调用NETWORK    }    private void showLocation(Location location) {        String myLocation = "经度:" + location.getLatitude() + "\n"                + "纬度:" + location.getLongitude();        Toast.makeText(this, "" + myLocation, Toast.LENGTH_SHORT).show();        oneText.setText(myLocation);    }    LocationListener locationListener = new LocationListener() {        /**         * 移动距离超过,调用此方法         * @param location         */        @Override        public void onLocationChanged(Location location) {            showLocation(location);        }        @Override        public void onStatusChanged(String s, int i, Bundle bundle) {        }        @Override        public void onProviderEnabled(String s) {        }        @Override        public void onProviderDisabled(String s) {        }    };    @Override    protected void onDestroy() {        super.onDestroy();        if (locationManager != null) {            //这个if也是要你检查权限,不加也能运行,但会红线提示而已            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {                return;            }            locationManager.removeUpdates(locationListener);        }    }}
0 0
原创粉丝点击