首页 > 技术文章 > 临近警告

jiww 2016-07-08 19:59 原文

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();
    }
  }

}

推荐阅读