LocationManager提供的addProximityAlert(double latitude , double longitude , float radius , long expiration , PendingIntent intent)方法用于添加一个临近警告。
所谓临近警告,也就是当用户手机不断临近指定固定点时,当与该固定点的距离小于指定范围时,系统可以触发相应的处理。
添加临近警告的方法的参数的说明如下:
latitude:指定固定点的纬度。
longitude:指定固定点的经度。
radius:该参数指定一个半径长度。
expiration:该参数指定经过多少毫秒后该临近警告就会过期失效。-1指定用不过期。
intent:该参数指定临近该固定点时触发该intent对应的组件。
下面的程序示范了如何检测手机是否进入北京天安门,当程序启动后,程序就会添加一个临近警告,当用户临近北京天安门所在的经度、纬度时,系统会显示提示。该程序代码如下:
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
public class ProximityTest extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_proximity_test);
//定位服务常量
String locService = Context.LOCATION_SERVICE;
//定位服务管理器实例
LocationManager locationManager;
//通过getSystemService方法获得LocationManager实例
locationManager = (LocationManager) getSystemService(locService);
//定义北京天安门的大致经度、纬度
double longitude = 116.54;
double latitude = 39.23;
//定义半径(5公里)
float radius = 5000;
//定义Intent
Intent intent = new Intent(this,ProximityAlertReceiver.class);
//将Intent包装成PendingIntent
PendingIntent pi = PendingIntent.getBroadcast(this, -1, intent, 0);
//添加临近警告
locationManager.addProximityAlert(latitude, longitude, radius, -1, pi);
}
}
上面的程序添加了一个临近警告,当用户手机临近指定经度、纬度确定的点时,系统会启动pi所对应的组件。pi对应的组件是一个BroadcastReceiver,代码如下:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.widget.Toast;
public class ProximityAlertReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// 获取是否为进入指定区域
boolean isEnter = intent.getBooleanExtra(
LocationManager.KEY_PROXIMITY_ENTERING, false);
if(isEnter){
//显示提示信息
Toast.makeText(context, "你已经进入北京天安门", Toast.LENGTH_LONG).show();
}else{
//显示提示信息
Toast.makeText(context, "你已经离开北京天安门", Toast.LENGTH_LONG).show();
}
}
}