Android:位置服务

前言

在开发 Android 位置相关应用时,可以从 GPS(全球定位系统)、passive、network 获取用户位置。通过 GPS 能获得最精确的信息。

LocationProvider 是位置源的意思,用来提供定位信息。
常用的 LocationProvider

方法名 描述
passive 被动定位方式,即利用其他应用程序使用定位更新了定位信息,系统会保存下来,该应用接收到消息后直接读取即可
gps 通过手机里面的 GPS 芯片利用卫星获取定位信息
network 通过网络获取定位信息。通常利用手机基站和 WIFI节点的地址来大致定位

LocationManager:该类提供系统定位服务访问功能。
LocationManager 提供的常用的方法

方法名 描述
list getAllProviders() 获取所有的 LocationProvider 列表
Location getLastKnowLocation(String provider) 根据 LocationProvider 获取最近一次已知的 Location
LocationProvider getProvider(String name) 根据名称来获取 LocationProvider
void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent) 通过指定的 LocationProvider 周期性地获取定位信息,并通过 intent 启动相应的组件
void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) 通过指定的 LocationProvider 周期性地获取定位信息,并触发 listener 所对应的触发器

LocationProvider:定位组件的抽象表示,通过该类可以获取该定位组件的相关信息。
LocationProvider 提供的常用方法

方法名 描述
int getAccuracy() 返回 LocationProvider 的精度
String getName() 返回 LocationProvider 的名称
int getPowerRequirement() 获取 LocationProvider 的电源需求

Location:该类表示特定时间地理位置信息,位置由经度、纬度、UTC时间戳以及可选的高度、速度、方向等组成。
Location 提供的常用方法

方法名 描述
float getAccuracy() 获取定位信息的精度
double getAltitude() 获取定位信息的高度
float getBearing() 获取定位信息的方向
double getLatitude() 获取定位信息的纬度
double getLongitude() 获取定位信息的经度
String getProvider() 获取提供该定位信息的 LocationProvider
float getSpeed() 获取定位信息的速度

举例说明:获取所有可用的 Location Provider

public class MainActivity extends Activity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //获取显示 LocationProvider 名称的 TextView 组件
        TextView textView = findViewById(R.id.text2);
        //获取 location 服务
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        //获取系统所有的 LocationProvider 名称
        List<String> providerNames = locationManager.getAllProviders();
        //使用 StringBuilder 保存数据
        StringBuilder stringBuilder = new StringBuilder();
        //遍历获取到的全部 Locationprovider 名称
        for(Iterator<String> iterator = providerNames.iterator(); iterator.hasNext(); ) {
   
            stringBuilder.append(iterator.next() + "\n");
        
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值