GPSDmeo

来源:互联网 发布:人工智能发展史 知乎 编辑:程序博客网 时间:2024/05/16 17:32

权限:<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
           <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>


一、首先判断并提示用户 是否开启GPS硬件设备


package com.example.hejingzhou.gpsdemo;import android.content.Context;import android.location.LocationManager;import android.util.Log;/** * Created by Hejingzhou on 2016/2/28. */public class OpenGPS {    public static boolean isOPen = false;    public static String strIsOpen ;    private String TAG = this.getClass().getSimpleName();    Context context;    public static String getStrIsOpen() {        return strIsOpen;    }    public void OpenGps(Context context){        this.context = context;        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);//创建位置管理对象并且获取位置的系统服务        if(locationManager.isProviderEnabled(locationManager.GPS_PROVIDER)){            Log.i(TAG,"GPS模块已经打开");            isOPen = true;            strIsOpen = "GPS已经打开";            return;        }else {            Log.i(TAG,"请打开GPS模块");            isOPen = false;            strIsOpen = "GPS未开启,请手动开启GPS";            /*Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);            startActivityForResult(intent,0);*///按说是这样做如果没有打开GPS就会跳转到开启GPS的界面但是我的startActivityForResult参数有问题        }    }}


二、MainActivity

package com.example.hejingzhou.gpsdemo;import android.Manifest;import android.content.Context;import android.content.pm.PackageManager;import android.location.Criteria;import android.location.GpsSatellite;import android.location.GpsStatus;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.widget.TextView;import android.widget.Toast;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity {    private String TAG = "MainActivity";    private long ExitTime;//双击back退出时间标量   /* GpsStatus gpsStatus;    GpsStatus.Listener gpListener;    int firstTime ;    int maxSatellites;*/    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        OpenGPS openGPS = new OpenGPS();        openGPS.OpenGps(this);        Toast.makeText(MainActivity.this, OpenGPS.getStrIsOpen(), Toast.LENGTH_SHORT).show();        if (OpenGPS.getStrIsOpen().equals("GPS已经打开")) {           getLocation();        } else {            return;        }    }    private void getLocation() {        /**         * 获取位置管理服务         */        final LocationManager locationManager;        String serviceName = Context.LOCATION_SERVICE;        locationManager = (LocationManager) this.getSystemService(serviceName);        /**         * 查找到服务信息         *         * A class indicating the application criteria for selecting a         * location provider.  Providers maybe ordered according to accuracy,         * power usage, ability to report altitude, speed,         * and bearing, and monetary cost.         */         /*        gpListener = new GpsStatus.Listener() {            @Override            public void onGpsStatusChanged(int event) {               gpsStatus = locationManager.getGpsStatus(null);                if(event == GpsStatus.GPS_EVENT_FIRST_FIX){                    firstTime = gpsStatus.getTimeToFirstFix();Log.i(TAG, "第一次耗时" + firstTime);                    Toast.makeText(MainActivity.this,"耗时"+String.valueOf(firstTime),Toast.LENGTH_LONG).show();                    maxSatellites = gpsStatus.getMaxSatellites();Log.i(TAG,"卫星数"+maxSatellites);                }            }        };     */        /**         * Criteria类表示应用程序选择一个标准位置提供者。供应商可能要求根据精度,用电,能力报告高度,速度,和方向,费用         */        Criteria criteria = new Criteria();        criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度        criteria.setAltitudeRequired(true);//设置Provider是否需要高度信息。海拔        criteria.setBearingRequired(true);//设置Provider是否需要方位信息。方向        criteria.setSpeedRequired(true);//允许访问速度        criteria.setCostAllowed(true);//设置Provider是否产生费用        criteria.setPowerRequirement(Criteria.POWER_HIGH);//设置电量消耗等级        String provider = locationManager.getBestProvider(criteria, true);//根据Criteria返回最适合的LocationProvider        /**         * 判断权限是否允许         */        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {            // TODO: Consider calling            //    ActivityCompat#requestPermissions            // here to request the missing permissions, and then overriding            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,            //                                          int[] grantResults)            // to handle the case where the user grants the permission. See the documentation            // for ActivityCompat#requestPermissions for more details.            return;        }        Location location = locationManager.getLastKnownLocation(provider);//通过GPS进行定位        updataToNewLocation(location);        /**         * 设置监听器,自动更新最小的时间为间隔N秒(1秒 = 1*1000)         */        locationManager.requestLocationUpdates(provider,3000,1,locationListener);    }    private void updataToNewLocation(Location location){        TextView textView1;        textView1 = (TextView)this.findViewById(R.id.GPS_State);        if(location != null){            double lon = location.getLongitude();Log.i(TAG, "经度 " + lon);            double lat = location.getLatitude();Log.i(TAG, "纬度 " + lat);            double high = location.getAltitude();Log.i(TAG, "海拔 " + high);            float accuracy = location.getAccuracy();Log.i(TAG, "精确度:" + accuracy);            double speed = location.getSpeed();Log.i(TAG,"速度 " + speed);            double direction = location.getBearing();Log.i(TAG,"方向:"+direction);            long time = location.getTime();Log.i(TAG, "时间 " + time);            String provider = location.getProvider();Log.i(TAG,"提供者"+provider);            SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");            Date date = new Date(time+(28800000));//8小时*60分钟*60秒*1000毫秒            String TIME;            TIME = format.format(date);            textView1.setText("经度:" + lon + "\n纬度:" + lat + "\n海拔:" + high + "\n速度:" + speed + "\n时间:"                    + TIME+"\n方向:"+direction+"\n精确度:"+String.valueOf(accuracy)+"\n数据提供者:"+provider/*+"\n定位耗时:"+firstTime+"\n卫星:"+maxSatellites*/);        }else {textView1.setText("没有位置信息!!!");}    }    private final LocationListener locationListener = new LocationListener() {        @Override        public void onLocationChanged(Location location) {            if(location != null){                Log.i(TAG,""+location.getLatitude()+location.getLongitude());            }        }        @Override        public void onStatusChanged(String provider, int status, Bundle extras) {}        @Override        public void onProviderEnabled(String provider) {}        @Override        public void onProviderDisabled(String provider) {}    };    /**     * 双击Back退出     * @param keyCode     * @param event     * @return     */    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(keyCode == KeyEvent.KEYCODE_BACK){            if((System.currentTimeMillis() - ExitTime)>2000){                Toast.makeText(MainActivity.this,"再按一次退出程序",Toast.LENGTH_SHORT).show();                ExitTime = System.currentTimeMillis();            }else {                finish();                onDestroy();                System.exit(0);            }            return  true;        }        return super.onKeyDown(keyCode, event);    }}



还有一些方法没用 ,今天不想弄了。

下边是GpsStatus类中的:

获取首次连接GPS的耗时  public int getTimeToFirstFix()

获取最大卫星数量     public int getMaxStatellites()

获取GPS的卫星状态   public iterable<GpsStatellite> getStatellies()

下边是GpsStatellite类:

获取方位角    public  float getAzimuth()

获取高度角    public float getElevation()

获取伪随机数  public int getprm()

获取信噪比  publci float getSnr()

 

源代码:

http://download.csdn.net/detail/csdnhejingzhou/9448489

0 0
原创粉丝点击