android gps

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 创建LocationManager对象

provider = locationManager.getBestProvider(getCriteria(), true); // 设置查询条件,返回定位方式,默认为GPS定位


//设置监听
locationListener = new LocationListener() {

            @Override
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
                Location l = locationManager.getLastKnownLocation(provider); // 获取位置信息
                updateView(l); // 更新EditText控件的内容
            }

            @Override
            public void onProviderDisabled(String provider) {
                
                updateView(null);
            }

            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
                updateView(location);
            }
        };



btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                progressDialog = new ProgressDialog(DemoActivity.this);
                progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                progressDialog.setMessage("定位中!");
                progressDialog.show();
                new Thread() {
                    @Override
                    public void run() {
                        getLocation();
                    };
                }.start();

            }
        });

private void getLocation() {
        // 获取位置管理服务

        try {

            location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置

            address = gps.updateToNewLocation(location);

            handler.sendEmptyMessage(2);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            address = e.getMessage();
            handler.sendEmptyMessage(3);
        }
    }
private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 0:
                // 登录加载

                break;
            case 1:

                break;
            case 2:
                progressDialog.dismiss();
                updateView(location);

            default:
                break;
            }
        };
    };
复制代码

需要注意的地方:

1、重写onStart,检测GPS是否开启

View Code
复制代码
 1 @Override
 2     protected void onStart() {
 3         // TODO Auto-generated method stub
 4         super.onStart();
 5 
 6             Boolean a = locationManager
 7                 .isProviderEnabled(LocationManager.GPS_PROVIDER);
 8 
 9         if (!a) {
10             Intent intent = new Intent();
11             intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
12             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
13 
14             try {
15                 startActivity(intent);
16 
17             } catch (ActivityNotFoundException ex) {
18 
19                 // The Android SDK doc says that the location settings
20                 // activity
21                 // may not be found. In that case show the general settings.
22 
23                 // General settings activity
24                 intent.setAction(Settings.ACTION_SETTINGS);
25                 try {
26                     startActivity(intent);
27                 } catch (Exception e) {
28                 }
29             }
30         }
31 
32     }
复制代码

2、重写onResume,设置监听

View Code
复制代码
1 @Override
2     protected void onResume() {
3         // TODO Auto-generated method stub
4         super.onResume();
5 
6          locationManager.requestLocationUpdates(provider, 1000, 0,
7          locationListener);// 此处实际用network方式定位
8 
9     }
复制代码

2、重写onPause,注销监听

View Code
复制代码
1 @Override
2     protected void onPause() {
3         // TODO Auto-generated method stub
4         super.onPause();
5 
6          if (locationManager != null) {
7          locationManager.removeUpdates(locationListener);
8          }
9     }
复制代码
原文地址:https://www.cnblogs.com/crazywenza/p/2891428.html