Android的gps服务,主要有两个类LocationManager和LocationProvider。LocationManager与android底层交互,提供系统位置的访问方法,LocationProvider定义位置服务的提供方法,gps、network或者passive。下面是个简单的例子:
package com.yeetrack.android.mygps;import java.io.IOException;import java.util.List;import java.util.Locale;import android.location.Address;import android.location.Criteria;import android.location.Geocoder;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.widget.TextView;import android.app.Activity;import android.content.Context;public class MainActivity extends Activity{    private TextView locationView;    private LocationManager locationManager;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //使用Geocoder实现地址位置和经纬度之间的转化        Geocoder geocoder = new Geocoder(this, Locale.getDefault());        locationView = (TextView)findViewById(R.id.locationId);        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);        StringBuilder stringBuilder = new StringBuilder("可利用的provider");        //providers有gps,network和passive。gps最精确,network是通过网络定位,不太精确,passive是被动接受推送        List<String> providers = locationManager.getProviders(true);         //位置变化监听接口        LocationListener locationListener = new LocationListener()        {            @Override            public void onStatusChanged(String provider, int status, Bundle extras)            {                // TODO Auto-generated method stub            }            @Override            public void onProviderEnabled(String provider)            {                // TODO Auto-generated method stub            }            @Override            public void onProviderDisabled(String provider)            {                // TODO Auto-generated method stub            }            @Override            public void onLocationChanged(Location location)            {                /**                 * 这里进行位置变化的一些操作                 */                System.out.println("位置改变了");            }        };        for(String provider : providers)        {            locationManager.requestLocationUpdates(provider, 0, 1000, locationListener);            stringBuilder.append("\n"+provider).append(":");            Location location = locationManager.getLastKnownLocation(provider);            if(location != null)            {                //经度                double lat = location.getLatitude();                //纬度                double lng = location.getLongitude();                double altitute = location.getAltitude();                stringBuilder.append("(");                stringBuilder.append(lat);                stringBuilder.append(",");                stringBuilder.append(lng);                stringBuilder.append(",高度"+altitute);                stringBuilder.append(",速度"+location.getSpeed());                stringBuilder.append(",方向"+location.getBearing());                stringBuilder.append(")");                //再将经纬度转化为地名                try                {                    List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);                    Address add = addresses.get(0);                    for(int i=0;i<=add.getMaxAddressLineIndex();i++)                        System.out.println(add.getAddressLine(i));                } catch (IOException e)                {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            else                stringBuilder.append("null");        }        //设置过滤条件        Criteria criteria = new Criteria();        //设置精确度        criteria.setAccuracy(Criteria.ACCURACY_FINE);        //设置耗电度        criteria.setPowerRequirement(Criteria.POWER_HIGH);        //是否需要高度信息        criteria.setAltitudeRequired(true);        //是否需要方位信息        criteria.setBearingRequired(true);        //方位经度        criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);        //是否需要速度信息        criteria.setSpeedRequired(true);        //速度经度        criteria.setSpeedAccuracy(Criteria.ACCURACY_HIGH);        //是否产生费用        criteria.setCostAllowed(true);        //获取符合条件的location provider        String bestProvider = locationManager.getBestProvider(criteria, true);        System.out.println(bestProvider);        List<String> matchProviders = locationManager.getProviders(false);        for(String index : matchProviders)            System.out.println(index);        //已知地名,获取该点的坐标等信息        String address = "北京天安门";        try        {            List<Address> addresses  = geocoder.getFromLocationName(address, 5);            if(addresses.size()!=0)            {                for(Address index : addresses)                {                    System.out.println("+++");                    System.out.println(index.getLatitude());                    System.out.println(index.getLongitude());                }            }        } catch (IOException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }        locationView.setText(stringBuilder);    }}

更多相关文章

  1. Android(安卓)MapView 申请apiKey
  2. Android(安卓)dumpstate 工具解析
  3. Android(安卓)GPS 获取
  4. Android(安卓)recyclerview更新item位置移动
  5. Android设备信息管理工具类
  6. Android(安卓)studio 常见问题
  7. android 根据经纬度定位所在城市
  8. android平台解析epub格式的书籍信息
  9. Android(安卓)中 JUnit 测试的配置

随机推荐

  1. 转载:[Android] Development FAQ
  2. android wifi 操作
  3. IJKPlayer/FFMPEG 4 Android
  4. android连续按两次返回退出程序(完整代码)
  5. Android(安卓)中的看门狗—Watchdog
  6. Android中Socket通讯类
  7. How to install Android(安卓)SDK in Ubu
  8. android Multiple markers at this line
  9. Android获取通话记录
  10. How to Cross Compile the Bash shell fo