首页 > 程序开发 > 移动开发 > 其他 > 正文
GPS获取坐标封装
2017-07-17 13:58:12       个评论    来源:qq_34723470的博客  
收藏    我要投稿

最近闲着无聊把原生的获取坐标封装成了一个实体。只需要new 出对象调方法然后记得onDestroy的时候移除监听就可以了。当然你也可以把我的类做成一个接口或者里面方法改成静态...

package com.example.gpsdemo;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.widget.Toast;


/**
 * Created by cy on 2017/6/9 0009.
 */

public class LocationUtils {
    private UpdateLocationListener updateLocationListener;
    private LocationManager manager;

    /**
     * 这是普通的网络定位以及gps定位,我这里优先考虑网络定位,因为网络定位局限性比较小
     * 并且速度快,第三个参数代表是否是内网,因为使用内网的sim卡是无法进行网络定位的
     */
    public void normalLocation(Context activity, UpdateLocationListener updateLocationListener, boolean insideSim) {
        LocationUtils.this.updateLocationListener = updateLocationListener;
        manager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
        if (insideSim) {
            if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                //如果没有打开网络就使用gps定位
                // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新

                // 1秒更新一次,或最小位移变化超过1米更新一次;
                // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
                manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1,
                        locationListener);
            } else {
                Toast.makeText(App.sharedInstance, "请打开GPS", Toast.LENGTH_SHORT).show();
            }
        } else {
            if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                //优先考虑网络定位
                // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新

                // 1秒更新一次,或最小位移变化超过1米更新一次;
                // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
                if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1,
                        locationListener);
            } else if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1,
                        locationListener);
            } else {
                Toast.makeText(App.sharedInstance, "请打开网络或GPS", Toast.LENGTH_SHORT).show();
            }
        }
    }

    // 位置监听
    private LocationListener locationListener = new LocationListener() {

        /**
         * 位置信息变化时触发
         */
        public void onLocationChanged(Location location) {
//            location = location;
            if (location != null && updateLocationListener != null)
                updateLocationListener.update(location);
        }

        /**
         * GPS状态变化时触发
         */
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        /**
         * GPS开启时触发
         */
        public void onProviderEnabled(String provider) {
        }

        /**
         * GPS禁用时触发
         */
        public void onProviderDisabled(String provider) {

        }

    };

    public interface UpdateLocationListener {
        void update(Location location);
    }

    public void reset() {
        updateLocationListener = null;
        if (manager != null && locationListener != null)
            manager.removeUpdates(locationListener);
    }
}

使用:
public class MainActivity extends AppCompatActivity {

    private TextView locationTv;
    private LocationUtils locationUtils;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        locationTv = (TextView) findViewById(R.id.tv);
        locationUtils = new LocationUtils();
        locationUtils.normalLocation(this, new LocationUtils.UpdateLocationListener() {
            @Override
            public void update(Location location) {
                //结果示范:如果没有得到值记得申请权限和给权限
                // 经度===120.121273
                //纬度===30.22291
                locationTv.setText("经度:" + location.getLongitude() + "\n" + "纬度:" + location.getLatitude());
            }
        }, false);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (locationUtils != null)
            locationUtils.reset();
    }
}

权限:
    
    
    


点击复制链接 与好友分享!回本站首页
上一篇:tinker集成
下一篇:Eclipse中使用fat-jar打包
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站