手机定位

1、写好数据显示的界面

 <TextView
        android:id="@+id/tv_location1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tv_location0"
        android:text="数据"
        android:textColor="#00bbff"
        android:textSize="20dp" />

2、获取系统的位置服务,可以用LocationManager类来访问系统的位置(服务)。 这些服务允许应用程序获得设备地理位置的周期性更新,或者在设备进入给定地理位置附近时触发指定的应用程序。我们可以通过getSystemService来实例化。
3、使用requestLocationUpdates方法来开启定位功能,最后当销毁界面时一定要关闭位置更新。

public class MainActivity extends Activity {

    private LocationManager mLM;
    private MyListener myListener;
    private TextView textLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textLocation = (TextView) findViewById(R.id.tv_location1);

        myListener = new MyListener();
        mLM = (LocationManager) getSystemService(LOCATION_SERVICE);//LocationManager类提供对系统位置服务的访问
        List<String> allProviders = mLM.getAllProviders();// 获取位置提供者,GPS、网络等等
        System.out.println(allProviders);// 打印的结果:[passive,gps,network] passive:指的是一种特殊的位置提供者(PASSIVE_PROVIDER),直接使用第三方应用获得的地理位置信息,如浏览器获得的位置信息(缺点:位置信息没有及时更新,优点:不用调用GPS定位,省电,获得位置数据速度快)  gps:GPS定位提供者(GPS_PROVIDER),代表要调用GPS模块定位  network:网络定位提供者(NETWORK_PROVIDER),代表通过基站和WIFI的访问点确定位置

        /**
         * 使用LocationManager中的方法开启定位功能。requestLocationUpdates方法的作用:使用指定的位置提供者注册位置更新,设置更新规则。
         * LocationManager.requestLocationUpdates(String provider, long minTime,float minDistance, LocationListener listener)
         * 参数:(指定位置提供者,最小更新的时间间隔,最短更新的距离,位置变化监听者)
         */
        mLM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,  myListener);
    }

    class MyListener implements LocationListener {
        private long elapsedRealtimeNanos;
        private double latitude;
        private double altitude;
        private double longitude;
        private float speed;
        private float bearing;
        private long time;

        /**
         * 当位置发生变化时调用
         */
        @SuppressLint("NewApi")
        @Override
        public void onLocationChanged(Location location) {
            latitude = location.getLatitude();//火星坐标
            longitude = location.getLongitude();
            altitude = location.getAltitude();
            elapsedRealtimeNanos = location.getElapsedRealtimeNanos();
            speed = location.getSpeed();
            bearing = location.getBearing();
            time = location.getTime();
            System.out.println("经度:"+ longitude+ "°\n纬度:"+ atitude+ "°\n海拔(World Geodetic System GPS所采用的坐标系是美国国防部1984世界坐标系,简称WGS-84。):" + altitude + "米\n地表速度:" + speed + "m/s\n本地区时间(地理时间):" + elapsedRealtimeNanos);
            textLocation.setText("经度:"  + longitude + "°\n纬度:"  + latitude + "°\n海拔(World Geodetic System GPS所采用的坐标系是美国国防部1984世界坐标系,简称WGS-84。):"+ altitude + "米\n地表速度:" + speed + "m/s\n本地区时间(地理时间):" + elapsedRealtimeNanos+"\n角度:"+bearing+"°\n时间(UTC):"+time);
        }

        /**
         * 当提供者状态发生变化时调用。当提供者无法获取位置信息时,或者提供者在无效后变成有效的状态,调用此方法。
         */
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Toast.makeText(getApplicationContext(), "位置提供者发生变化onStatusChanged",1000).show();
        }

        /**
         * 当用户启用位置提供者时调用,即GPS开关打开。
         */
        @Override
        public void onProviderEnabled(String provider) {
            Toast.makeText(getApplicationContext(), "GPS开关打开onProviderEnabled",1000).show();
        }

        /**
         * 当用户禁用位置提供者时调用,即GPS开关关闭。如果调用requestlocationupdates时,已经禁用位置提供者时,调用此方法。
         */
        @Override
        public void onProviderDisabled(String provider) {
            Toast.makeText(getApplicationContext(), "GPS开关关闭onProviderDisabled", 1000).show();
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 当界面销毁时,应该停止监听位置更新功能,否则该应用会执行更新位置。
        mLM.removeUpdates(myListener);
    }
}

3、在清单文件AndroidManifest.xml中添加权限。

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

4、运行结果
这里写图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值