前面介绍过LocationManager有一个addProximityAlert(double latitude,double longitude,float radius,long expiration,PendingIntent intent)方法,该方法可用于添加临近警告。其参数说明如下:
latitude:指定固定点的经度。
longitude:指定固定点的纬度。
radius:指定半径长度。
expiration:指定经过多少毫秒后该临近警告就会过期失效。-1表示永不过期。
intent:该参数指定临近该固定点时触发该intent对应的组件.
下面这个小程序可以检测手机是否进入和离开了指定点的指定范围内。代码如下:
Activity:
- package com.home.proximityalert;
- import com.home.receiver.ProximityAlertReceiver;
- import android.app.Activity;
- import android.app.PendingIntent;
- import android.content.Context;
- import android.content.Intent;
- import android.location.LocationManager;
- import android.os.Bundle;
- public class ProximityAlertTestActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 获取系统LocationManager服务
- LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
- // 定义成都市成华区的大致经度、纬度
- double longitude = 104.10;
- double latitude = 30.67;
- // 定义半径(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);
- }
- }
BroadcastReceiver(ProximityAlertReceiver):
- package com.home.receiver;
- 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();
- }
- }
- }
权限:
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>