安卓学习笔记41:全球定位系统

文章目录

  • 零、学习目标
  • 一、了解全球定位系统
      • (一)GPS概述
    • (二)GPS核心API
      • 1、创建LocationManger对象
      • 2、LocaitonManger类常用方法
        • (1)boolean addGpsStatusListener(GpsStatus.Listener listener)
        • (2)List getAllProviders()
        • (3)String getBestProvider(Criteria criteria, boolean enabledOnly)
      • 3、LocationProvider类常用方法
        • (1)int getAccuracy()
        • (2)String getName()
        • (3)int getPowerRequirement()
        • (4)boolean hasMonetaryCost()
      • 4、Location类常用方法
        • (1)String getProvider()
        • (2)double getAltitude()
        • (3)double getLongitude()
        • (4)float getBearing()
      • 5、使用GPS定位基本步骤
  • 二、案例演示 - 显示全部位置提供者
    • (一)运行效果
    • (二)涉及知识点
    • (三)实现步骤
      • 1、创建安卓应用【DisplayAllLocationProviders】
      • 2、将背景图片拷贝到drawable目录
      • 3、主布局资源文件activity_main.xml
      • 3、创建提供者列表项模板 - provider_list_item.xml
      • 4、主界面类 - MainActivity
      • 5、启动应用,查看效果

零、学习目标

  1. 知道三种位置提供者
  2. 掌握如何获取位置提供者
  3. 掌握如何获取和设置位置信息
  4. 能实时获取GPS定位信息
  5. 能计算地球上任意两点的距离

一、了解全球定位系统

(一)GPS概述

美国从上个世纪70年代开始投资这个项目,耗资120亿美元造就了全球定位系统(GPS)。这个系统的核心就是24颗卫星,这些卫星离地2万公里,以12小时为周期绕着地球旋转。刚开始这个项目主要是为军方提供精确定位服务,但现在这个系统已经获得广泛的应用。我们的安卓SDK也提供了丰富的API (Application Programming Interface)来操作GPS,开发人员就可以通过GPS API和安卓设备自带的GPS模块来定位全球的任何位置,而且还包括跟踪手机的位置。

(二)GPS核心API

安卓SDK为GPS提供了很多API,但最核心的是LocationManager,这是一个系统服务类,跟我们以前学过的WindowManager、AudioManager、NotificationManager等服务类创建服务对象的方法是类似的。所有跟GPS相关的操作都是由LocationManager对象及其派生出来的对象来完成。

1、创建LocationManger对象

  • 利用窗口(Activity)提供的getSystemService方法来创建位置管理器对象。
    LocationManger manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);

  • 一旦获得了LocationManager对象,我们就可以调用它的方法来获取跟GPS相关的服务和对象。

2、LocaitonManger类常用方法

(1)boolean addGpsStatusListener(GpsStatus.Listener listener)

  • 添加监听GPS状态的监听器

(2)List getAllProviders()

  • 获得所有位置提供者(LocationProvider)的信息

(3)String getBestProvider(Criteria criteria, boolean enabledOnly)

  • 根据参数criteria获得最佳位置提供者
    ……

3、LocationProvider类常用方法

(1)int getAccuracy()

  • 获取LocationProvider的精度

(2)String getName()

  • 获取LocationProvider的名称

(3)int getPowerRequirement()

  • 获取LocationProvider的电源要求

(4)boolean hasMonetaryCost()

  • 获取LocationProvider是收费的还是免费的
    ……

4、Location类常用方法

(1)String getProvider()

  • 获得提供定位信息的LocationProvider名称

(2)double getAltitude()

  • 获得位置的海拔高度

(3)double getLongitude()

  • 获得位置的经度

(4)float getBearing()

获得位置的方向
……

5、使用GPS定位基本步骤

  • 第一步:获取系统的LocationManager对象-
  • 第二步:指定LocationProvider来获取定位信息
  • 第三步:通过Location对象获取或设置位置信息

二、案例演示 - 显示全部位置提供者

(一)运行效果

安卓学习笔记41:全球定位系统_第1张图片

(二)涉及知识点

  1. 线性布局(LinearLayout)
  2. 列表视图(ListView)
  3. 数组适配器(ArrayAdapter)
  4. 位置管理器(LocationManager)
  5. 吐司(Toast)

(三)实现步骤

1、创建安卓应用【DisplayAllLocationProviders】

安卓学习笔记41:全球定位系统_第2张图片
安卓学习笔记41:全球定位系统_第3张图片

2、将背景图片拷贝到drawable目录

安卓学习笔记41:全球定位系统_第4张图片

3、主布局资源文件activity_main.xml

安卓学习笔记41:全球定位系统_第5张图片


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical"
    android:padding="20dp" >

    <ListView
        android:id="@+id/lvLocationProvider"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
LinearLayout>

3、创建提供者列表项模板 - provider_list_item.xml

安卓学习笔记41:全球定位系统_第6张图片


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_poem_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:gravity="center_vertical"
    android:minHeight="50dp"
    android:textSize="30sp"
    android:textColor="#0000ff"/>

4、主界面类 - MainActivity

安卓学习笔记41:全球定位系统_第7张图片

package net.hw.display_all_location_providers;

import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.List;

/**
 * 功能:列表显示全部位置提供者
 * 作者:华卫
 * 日期:2021年01月02日
 */
public class MainActivity extends AppCompatActivity {
     

    private ListView lvLoationProvider; // 位置提供者列表
    private LocationManager mLocationManager; // 位置管理器对象
    private List<String> providers; // 位置提供者名称列表
    private ArrayAdapter<String> adapter; // 数组适配器

    @Override
    public void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        // 利用布局文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        lvLoationProvider = findViewById(R.id.lvLocationProvider);

        // 第一步、获得位置管理器对象
        mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        // 第二步、获得全部位置提供者名称
        providers = mLocationManager.getAllProviders();
        // 第三步、创建数组适配器,将数据源与列表控件绑定
        adapter = new ArrayAdapter<String>(this, // 上下文环境
                R.layout.provider_list_item, // 列表项模板
                providers // 数组列表作为数据源
        );
        // 第四步、列表控件设置适配器,让适配器起作用
        lvLoationProvider.setAdapter(adapter);
        // 第五步、列表项单击事件处理
        lvLoationProvider.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
     
                String strProviderName = providers.get(position);
                if (strProviderName.equals("network")) {
     
                    Toast.makeText(MainActivity.this, "通过网络获取位置信息。", Toast.LENGTH_SHORT).show();
                } else if (strProviderName.equals("passive")) {
     
                    Toast.makeText(MainActivity.this, "被动获取位置信息。", Toast.LENGTH_SHORT).show();
                } else if (strProviderName.equals("gps")) {
     
                    Toast.makeText(MainActivity.this, "通过GPS获取位置信息。", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

5、启动应用,查看效果

安卓学习笔记41:全球定位系统_第8张图片

你可能感兴趣的:(安卓编程基础)