Android开发笔记(四十六)手机相关事件

本文详细探讨了Android开发中手机定位的实现,包括定位条件器、定位管理器和定位监听器的使用,并提供了手机定位的实战示例。此外,还介绍了如何通过电话管理器获取手机基站和信号状态,以及如何设置手机状态监听器来监控手机信号变化。
摘要由CSDN通过智能技术生成

手机定位

有一类事件必须依赖于手机信号方能触发,如果把设备中的sim卡拔出,或者该设备本身不支持sim卡(如ipad),那么这类事件将永远不会被触发。在Android中,这类事件包括定位事件和手机信号事件。
与定位有关的类主要有:
1、定位条件器Criteria : 该类用于设置定位的前提条件,比如精度、速度、海拔、方位等等信息。
2、定位管理器LocationManager : 该类用于获取定位信息的提供者,设置监听器,并获取最近一次的位置信息。
3、定位监听器LocationListener : 该类用于监听定位信息的变化事件,如定位提供者的开关、位置信息发生变化等等。


定位条件器

Criteria的常用参数设置方法如下:
setAccuracy : 设置定位精确度。有两个取值,ACCURACY_FINE表示精度高,ACCURACY_COARSE表示精度低
setSpeedAccuracy : 设置速度的定位精确度。有两个取值,ACCURACY_HIGH表示精度高,ACCURACY_LOW表示精度低
setAltitudeRequired : 设置是否需要海拔信息。取值true表示需要,false表示不需要
setBearingRequired : 设置是否需要方位信息。取值true表示需要,false表示不需要
setCostAllowed : 设置是否允许运营商收费。取值true表示允许,false表示不允许
setPowerRequirement : 设置对电源的需求。有三个取值,POWER_LOW表示耗电低,POWER_MEDIUM表示耗电中等,POWER_HIGH表示耗电高


定位管理器

管理器类名 : LocationManager
获取管理器实例的方法:
LocationManager mLocationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
管理器的常用方法如下:
getBestProvider : 获取最佳的定位提供者。第一个参数设置条件器Criteria,第二个参数一般取值true。返回值主要有两个:GPS定位返回gps,网络定位返回network
isProviderEnabled : 判断指定提供者是否可用
getLastKnownLocation : 获取最近一次的定位地点
requestLocationUpdates : 设置定位监听器


定位监听器

监听器类名 : LocationListener
设置监听器的方法:
requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)
其中第一个参数设置定位提供者,第二个参数设置位置更新的最小间隔时间,第三个参数设置位置更新的最小距离,第四个参数设置监听器实例。
监听器需要重写的方法:
onLocationChanged : 在位置地点发生变化时调用
onProviderDisabled : 在定位提供者被用户关闭时调用
onProviderEnabled : 在定位提供者被用户开启时调用
onStatusChanged : 在定位提供者的状态发生变化时调用。状态值有三个:OUT_OF_SERVICE表示在服务范围之外,TEMPORARILY_UNAVAILABLE表示暂时不可用,AVAILABLE表示可用


手机定位示例

手机开启GPS信号,GPS定位的截图如下:


手机关闭GPS信号,网络定位的截图如下:


定位信息获取的示例代码如下:
import com.example.exmmobile.util.Utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;

public class LocationActivity extends Activity {
	
	private final static String TAG = "LocationActivity";
	private TextView tv_location;
	private String mLocation="";
	private LocationManager mLocationMgr;
	private Criteria mCriteria = new Criteria();
	private Handler mHandler = new Handler();
	private boolean bLocationEnable = false;

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

		initWidget();
		initLocation();
		mHandler.postDelayed(mRefresh, 100);
	}

	private void initWidget() {
		tv_location = (TextView) findViewById(R.id.tv_location);
		mLocationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		// 设置定位精确度 Criteria.ACCURACY_COARSE 比较粗略, Criteria.ACCURACY_FINE 则比较精细
		mCriteria.setAccuracy(Criteria.ACCURACY_FINE);
		// 设置是否需要海拔信息 Altitude
		mCriteria.setAltitudeRequired(true);
		// 设置是否需要方位信息 Bearing
		mCriteria.setBearingRequired(true);
		// 设置是否允许运营商收费
		mCriteria.setCostAllowed(true);
		// 设置对电源的需求
		mCriteria.setPowerRequirement(Criteria.POWER_LOW);
	}

	private void initLocation() {
		String bestProvider = mLocationMgr.getBestProvider(mCriteria, true);
		if (bestProvider == null) {
			bestProvider = LocationManager.NETWORK_PROVIDER;
		}
		if (mLocationMgr.isProviderEnabled(bestProvider)) {
			tv_location.setText
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值