您的位置:首页 > 移动开发 > Android开发

Android开发_LocationManager定位应用

2015-04-17 09:29 260 查看
Android中LocationManager的提供了一系列方法来处理地理位置相关的问题,包括查询上一个已知位置;注册/注销来自某个 LocationProvider的周期性的位置更新;以及注册/注销接近某个坐标时对一个已定义Intent的触发等。下面就来介绍Android 中LocatinManager的简单使用。

获取当前手机支持的所有定位服务

public class AllProvidersActivity extends Activity {
private ListView mProviders;
private LocationManager mLocationManager;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mProviders = (ListView) findViewById(R.id.providers);

// 获取LocationManager服务
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

// 获取当前可用的定位服务名称
List<String> providerNames = mLocationManager.getAllProviders();

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, providerNames);

mProviders.setAdapter(adapter);
}
}

定位服务所需要的权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

使用定位服务

public class LocationActivity extends Activity {
LocationManager mLocationManager;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

// GPS定位的服务
Location location = mLocationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);

updateView(location);

// 注册监听事件
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
2000, 8, new LocationListener() {
// 状态发生改变
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {

}

// 定位服务开启
@Override
public void onProviderEnabled(String provider) {
updateView(mLocationManager
.getLastKnownLocation(provider));
}

// 定位服务不可用
@Override
public void onProviderDisabled(String provider) {
}

// 定位信息发生改变
@Override
public void onLocationChanged(Location location) {
updateView(location);
}
});
}

// 更新位置信息
public void updateView(Location newLocation) {
if (newLocation != null) {
StringBuilder sb = new StringBuilder();
sb.append("位置信息:\n");
sb.append("经度:");
sb.append(newLocation.getLongitude());
sb.append("\n纬度:");
sb.append(newLocation.getLatitude());
sb.append("\n高度:");
sb.append(newLocation.getAltitude());
sb.append("\n速度");
sb.append(newLocation.getSpeed());
sb.append("\n方向");
sb.append(newLocation.getBearing());
System.out.println(sb.toString());
}
}
}

计算两点间的距离

public class DistanceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lv);

final float[] results = new float[3];
Location.distanceBetween(20.123, 30.05644, 30.124, 40.543, results);

System.out.println(String.valueOf(results[0]) + "米");
}
}

实现接近某个位置是放出警报

public class ProximityAlertActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

// 设置目的地的位置
double longitude = 123.427109;
double latitude = 41.764998;
float radius = 2000;

Intent intent = new Intent(this, PromimityAlertRecivery.class);

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1,
intent, 0);

locationManager.addProximityAlert(latitude, longitude, radius, -1,
pendingIntent);
}
}


public class PromimityAlertRecivery {
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android