前面介紹過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"/>