本文实例讲述了Android使用criteria选择合适的地理位置服务实现方法。分享给大家供大家参考,具体如下:
/* LocationActivity.java * @author octobershiner * 2011 7 24 * SE.HIT * 利用Criteria选择最优的位置服务,演示定位用户的位置并且监听位置变化的代码 * */ package uni.location; import android.app.Activity; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Vibrator; import android.util.Log; import android.widget.TextView; public class LocationActivity extends Activity { /** Called when the activity is first created. */ //创建lcoationManager对象 private LocationManager manager; private static final String TAG = \"LOCATION DEMO\"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取系统的服务, manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); //创建一个criteria对象 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); //设置不需要获取海拔方向数据 criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); //设置允许产生资费 criteria.setCostAllowed(true); //要求低耗电 criteria.setPowerRequirement(Criteria.POWER_LOW); String provider = manager.getBestProvider(criteria, false); Log.i(TAG, \"we choose \"+ provider); Location location = manager.getLastKnownLocation(provider); //第一次获得设备的位置 updateLocation(location); //重要函数,监听数据测试 manager.requestLocationUpdates(provider, 6000, 10, locationListener); } //创建一个事件监听器 private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { updateLocation(location); } public void onProviderDisabled(String provider){ updateLocation(null); Log.i(TAG, \"Provider now is disabled..\"); } public void onProviderEnabled(String provider){ Log.i(TAG, \"Provider now is enabled..\"); } public void onStatusChanged(String provider, int status,Bundle extras){ } }; //获取用户位置的函数,利用Log显示 private void updateLocation(Location location) { String latLng; if (location != null) { double lat = location.getLatitude(); double lng = location.getLongitude(); latLng = \"Latitude:\" + lat + \" Longitude:\" + lng; } else { latLng = \"Can\'t access your location\"; } Log.i(TAG, \"The location has changed..\"); Log.i(TAG, \"Your Location:\" +latLng); } }
同时修改manifest.xml文件:
<?xml version=\"1.0\" encoding=\"utf-8\"?> <manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"uni.location\" android:versionCode=\"1\" android:versionName=\"1.0\"> <uses-sdk android:minSdkVersion=\"8\" /> <application android:icon=\"@drawable/icon\" android:label=\"@string/app_name\"> <activity android:name=\".LocationActivity\" android:label=\"@string/app_name\"> <intent-filter> <action android:name=\"android.intent.action.MAIN\" /> <category android:name=\"android.intent.category.LAUNCHER\" /> </intent-filter> </activity> </application> <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /> </manifest>
演示结果:
可任看到 我们只要求低的精确度并且最低电量,从最后一行可以看到我的虚拟机网络服务并没有打开,但是选择最佳provider的时候,参数选择了false 所以同样可以选择。
希望本文所述对大家Android程序设计有所帮助。
本文地址:https://www.stayed.cn/item/10475
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我