当前位置:首页 > Android > 正文内容

Android Location在GPS中的应用(一)

jsc11年前 (2014-08-27)Android3807

新建AndroidProject,注意选择Google APIs:
 

打开AndroidManifest.xml,在其中加入GPS使用权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 
main.java的代码如下:

public class main extends Activity { 
    /** Called when the activity is first created. */ 
private LocationManager locationManager; 
private String provider; 
private Location location; 
private Address address; 
    @Override 
    public void onCreate(BundlesavedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        // 获取LocationManager服务 
        locationManager =(LocationManager) this 
               .getSystemService(Context.LOCATION_SERVICE); 
        // 获取Location Provider 
        getProvider(); 
        // 如果未设置位置源,打开GPS设置界面 
        openGPS(); 
        // 获取位置 
        location = locationManager.getLastKnownLocation(provider); 
        // 显示位置信息到文字标签 
        updateWithNewLocation(location); 
        // 注册监听器locationListener,第2、3个参数可以控制接收gps消息的频度以节省电力。第2个参数为毫秒, 
        // 表示调用listener的周期,第3个参数为米,表示位置移动指定距离后就调用listener 
        locationManager.requestLocationUpdates(provider, 2000, 10, 
                       locationListener); 
    } 
    // 判断是否开启GPS,若未开启,打开GPS设置界面 
    private void openGPS() {        
        if (locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER) 
        ||locationManager.isProviderEnabled(android.location.LocationManager.NETWORK_PROVIDER) 
        ) { 
           Toast.makeText(this, "位置源已设置!", Toast.LENGTH_SHORT).show(); 
            return; 
        } 
        Toast.makeText(this, "位置源未设置!", Toast.LENGTH_SHORT).show(); 
        // 转至GPS设置界面 
        Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
       startActivityForResult(intent,0); 
    } 
    // 获取Location Provider 
    private void getProvider(){ 
    // 构建位置查询条件 
        Criteria criteria = new Criteria(); 
        // 查询精度:高 
       criteria.setAccuracy(Criteria.ACCURACY_FINE); 
        // 是否查询海拨:否 
       criteria.setAltitudeRequired(false); 
        // 是否查询方位角:否 
       criteria.setBearingRequired(false); 
        // 是否允许付费:是 
        criteria.setCostAllowed(true); 
        // 电量要求:低 
       criteria.setPowerRequirement(Criteria.POWER_LOW); 
        // 返回最合适的符合条件的provider,第2个参数为true说明,如果只有一个provider是有效的,则返回当前provider 
        provider = locationManager.getBestProvider(criteria,true);   
    } 
 // Gps消息监听器 
    private final LocationListener locationListener = new LocationListener(){ 
    // 位置发生改变后调用 
        public voidonLocationChanged(Location location) { 
       updateWithNewLocation(location); 
        } 
        // provider被用户关闭后调用 
        public voidonProviderDisabled(String provider){ 
        updateWithNewLocation(null); 
        } 
        // provider被用户开启后调用 
        public voidonProviderEnabled(String provider){ } 
        // provider状态变化时调用 
        public voidonStatusChanged(String provider, int status, 
        Bundle extras){ } 
    }; 
    // Gps监听器调用,处理位置信息 
    private void updateWithNewLocation(Locationlocation) { 
        String latLongString; 
        TextView myLocationText= (TextView)findViewById(R.id.text); 
        if (location != null) { 
        double lat =location.getLatitude(); 
        double lng =location.getLongitude(); 
        latLongString = "纬度:" + lat + "/n经度:" + lng; 
        } else { 
        latLongString = "无法获取地理信息"; 
        } 
        myLocationText.setText("您当前的位置是:/n" + 
        latLongString+"/n"+getAddressbyGeoPoint(location)); 
    } 
// 获取地址信息 
privateList<Address> getAddressbyGeoPoint(Location location) { 
List<Address> result = null; 
// 先将Location转换为GeoPoint 
// GeoPoint gp=getGeoByLocation(location); 
try { 
if (location != null) { 
// 获取Geocoder,通过Geocoder就可以拿到地址信息 
Geocoder gc = new Geocoder(this, Locale.getDefault()); 
result= gc.getFromLocation(location.getLatitude(), location.getLongitude(), 1); 
} 
} catch (Exception e) { 
e.printStackTrace(); 
} 
return result; 
} 
}

如果,要想在模拟器中看到效果,还需要在DDMS的EmulatorControl面板中进行一些设置。如果你看不到Emulator Control面板,可以从window->Show view->Other…中打开它:
 

在Emulator Control面板中,你可以找到一个LocationControls的地方:
 
201408271409116465571921.png
你可以在Longitude和Latitude中输入一个虚拟的经纬度,然后点击Send,可以把模拟器的位置修改为指定位置。此时运行程序,即可看到如图所示的信息:
 201408271409116493852808.jpg

        有时候,你可能出现“无法获取地理信息”的错误。这可能是没有开启“启用GPS卫星”选项。不要奇怪,在模拟器中,“使用无线网络”是无效的,使用该选项无法获取地理信息,因为模拟器中根本没有sim卡,也就无法通过基站来定位了。
如果在真机上就不同了。如果机器没有内置GPS模块,那么启用GPS卫星选项反而无法进行定位,具体情况只有多试几次才能明白。
@font-face { font-family: "宋体";}@font-face { font-family: "Cambria";}p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0cm 0cm 10pt; font-size: 12pt; font-family: "Times New Roman"; }div.Section1 { page: Section1; }
Geocoder需要访问internet,在真机上调试请打开wifi或者3G网络。

扫描二维码推送至手机访问。

版权声明:本文由微小站发布,如需转载请注明出处。

本文链接:https://jsc0.com/post/16.html

标签: GPS
分享给朋友:

“Android Location在GPS中的应用(一)” 的相关文章

创建Popwindow弹出菜单的两种方式

创建Popwindow弹出菜单的两种方式

方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.v...

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性添加图标

注:(图中每一个条目和图标都是由代码动态生成) 代码动态布局,并需要为每一个条目设置图标,此时用到了 android:drawableLeft="@drawable/icon" ...

Android应用加入微信分享

Android应用加入微信分享

一、申请你的AppIDhttp://open.weixin.qq.com/  友情提示:推荐使用eclipse打包软件最后一步的MD5值去申请AppID二、官网下载libammsdk.jar包http://open.weixin.qq.com/download/?lang=zh_...

Android中的消息通知(NotificationManager和Notification)

下面来谈谈notification,这个notification一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提 示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个快讯。已添加的Notification.Builder,使其更容易构建通知。 notifica...

采用SharedPreferences保存用户偏好设置参数和读取设置参数

采用SharedPreferences保存用户偏好设置参数和读取设置参数

Android SDK支持那些文件存储技术? 1. 使用SharedPreferences保存key-value类型的数据 2. 流文件存储(使用openFileOutput和openFileInput方法,或FileInputStream和FileO...

Android SharedPreferences PreperenceScreen 偏好数据存取

SharedPreferences是一个接口,程序是无法创建SharedPreferences实例的,1、Context.getSharedPreferences(String name,int mode)来得到一个指定name的SharedPreferences实例2、PreferenceMana...