Android位置管理器不支持';行不通

Android位置管理器不支持';行不通,android,gps,maps,location,Android,Gps,Maps,Location,我正在尝试创建并显示设备当前位置和定义点之间的路由。 我使用以下代码: public class RoutePath extends MapActivity { /** Called when the activity is first created. */ MapView mapView; private RoutePath _activity; GeoPoint srcGeoPoint,destGeoPoint; private static Lis

我正在尝试创建并显示设备当前位置和定义点之间的路由。 我使用以下代码:

public class RoutePath extends MapActivity {
    /** Called when the activity is first created. */
    MapView mapView;
    private RoutePath _activity;
    GeoPoint srcGeoPoint,destGeoPoint;
    private static List<Overlay> mOverlays;
    MapController mc;
    Location location;
    private MyLocationOverlay myLocationOverlay;
    String n;
    double longitude;
    double latitude;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedData data = SharedData.getInstance();
        mapView = new MapView(this,"apyKey");
        mapView.setClickable(true); 




        setContentView(mapView);
        _activity = this;
        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
        Location location =lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        longitude = location.getLongitude();
        latitude = location.getLatitude();

        double src_lat = latitude;
        double src_long = longitude;
        double dest_lat = 38.1267303;
        double dest_long = 13.3466097;

       String n = String.valueOf(src_long);
       Log.d("asd",n);

        if(src_lat == -1 || src_long == -1 || dest_lat == -1 || dest_long == -1){
            showAlert("Please enter source and destination points");
        }else{

            srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),(int) (src_long * 1E6));
            destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),(int) (dest_long * 1E6));

            List<Overlay> mapOverlays = mapView.getOverlays();
            Drawable srcdrawable = this.getResources().getDrawable(R.drawable.pushpin1);
            CustomItemizedOverlay srcitemizedOverlay = new CustomItemizedOverlay(srcdrawable);
            //CustomItemizedOverlay srcitemizedOverlay = new CustomItemizedOverlay(getDrawable("com/agarwal/route/pin_green.png"));
            OverlayItem srcoverlayitem = new OverlayItem(srcGeoPoint, "Hello!", "This is your Location.");

            Drawable destdrawable = this.getResources().getDrawable(R.drawable.pushpin1);
            CustomItemizedOverlay  destitemizedOverlay = new CustomItemizedOverlay( destdrawable );
           // CustomItemizedOverlay destitemizedOverlay = new CustomItemizedOverlay(getDrawable("com/agarwal/route/pin_red.png"));
            OverlayItem destoverlayitem = new OverlayItem(destGeoPoint, "Hello!", "This is dest Location.");

            srcitemizedOverlay.addOverlay(srcoverlayitem);
            destitemizedOverlay.addOverlay(destoverlayitem);

            mapOverlays.add(srcitemizedOverlay);
            mapOverlays.add(destitemizedOverlay);

            connectAsyncTask _connectAsyncTask = new connectAsyncTask();
            _connectAsyncTask.execute();       
            mapView.setBuiltInZoomControls(true);
            mapView.displayZoomControls(true);
            mOverlays = mapView.getOverlays();
            mapView.getController().animateTo(srcGeoPoint);
            mapView.getController().setZoom(12);
        }
    }
    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }
    //era private prima di 
   private class connectAsyncTask extends AsyncTask<Void, Void, Void>{
        private ProgressDialog progressDialog;
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();

            progressDialog = new ProgressDialog(_activity);
            progressDialog.setMessage("Caricamento del percorso...");
            progressDialog.setIndeterminate(true);
            progressDialog.show();
        }
        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            fetchData();

            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);           
            if(doc!=null){
                Overlay ol = new MyOverlay(_activity,srcGeoPoint,srcGeoPoint,1);
                mOverlays.add(ol);
                NodeList _nodelist = doc.getElementsByTagName("status");
                Node node1 = _nodelist.item(0);
                String _status1  = node1.getChildNodes().item(0).getNodeValue();
                if(_status1.equalsIgnoreCase("OK")){
                    NodeList _nodelist_path = doc.getElementsByTagName("overview_polyline");
                    Node node_path = _nodelist_path.item(0);
                    Element _status_path = (Element)node_path;
                    NodeList _nodelist_destination_path = _status_path.getElementsByTagName("points");
                    Node _nodelist_dest = _nodelist_destination_path.item(0);
                    String _path  = _nodelist_dest.getChildNodes().item(0).getNodeValue();
                    List<GeoPoint> _geopoints = decodePoly(_path);
                    GeoPoint gp1;
                    GeoPoint gp2;
                    gp2 = _geopoints.get(0);
                    Log.d("_geopoints","::"+_geopoints.size());
                    for(int i=1;i<_geopoints.size();i++) // the last one would be crash
                    {

                        gp1 = gp2;
                        gp2 = _geopoints.get(i);
                        Overlay ol1 = new MyOverlay(gp1,gp2,2,Color.BLUE);
                        mOverlays.add(ol1);
                    }
                    Overlay ol2 = new MyOverlay(_activity,destGeoPoint,destGeoPoint,3);
                    mOverlays.add(ol2);

                    progressDialog.dismiss();
                }else{
                    showAlert("Unable to find the route");
                }

                Overlay ol2 = new MyOverlay(_activity,destGeoPoint,destGeoPoint,3);
                mOverlays.add(ol2);
                progressDialog.dismiss();
                mapView.scrollBy(-1,-1);
                mapView.scrollBy(1,1);
            }else{
                showAlert("Unable to find the route");
            }

        }

    } //end Async
    Document doc = null;
    private void fetchData()
    {

        StringBuilder urlString = new StringBuilder();
        urlString.append("http://maps.google.com/maps/api/directions/xml?origin=");
        urlString.append( Double.toString((double)srcGeoPoint.getLatitudeE6()/1.0E6 ));
        urlString.append(",");
        urlString.append( Double.toString((double)srcGeoPoint.getLongitudeE6()/1.0E6 ));
        urlString.append("&destination=");//to
        urlString.append( Double.toString((double)destGeoPoint.getLatitudeE6()/1.0E6 ));
        urlString.append(",");
        urlString.append( Double.toString((double)destGeoPoint.getLongitudeE6()/1.0E6 ));
        urlString.append("&sensor=true&mode=driving");    
        Log.d("url","::"+urlString.toString());
        HttpURLConnection urlConnection= null;
        URL url = null;
        try
        {
            url = new URL(urlString.toString());
            urlConnection=(HttpURLConnection)url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.connect();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            doc = (Document) db.parse(urlConnection.getInputStream());//Util.XMLfromString(response);
        }catch (MalformedURLException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }catch (ParserConfigurationException e){
            e.printStackTrace();
        }
        catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private List<GeoPoint> decodePoly(String encoded) {

        List<GeoPoint> poly = new ArrayList<GeoPoint>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6),
                    (int) (((double) lng / 1E5) * 1E6));
            poly.add(p);
        }

        return poly;
    }
    private void showAlert(String message){
        AlertDialog.Builder alert = new AlertDialog.Builder(_activity);
        alert.setTitle("Error");
        alert.setCancelable(false);
        alert.setMessage(message);
        alert.setPositiveButton("Ok",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub

            }
        });
        alert.show();
    }


    private Drawable getDrawable(String fileName){
        return Drawable.createFromStream(_activity.getClass().getClassLoader().getResourceAsStream(fileName), "pin");
    }


}
公共类RoutePath扩展了MapActivity{
/**在首次创建活动时调用*/
地图视图;
私人路线路径活动;
地质点SRCEOPENT,DESTGEOPENT;
私有静态列表移动列表;
地图控制器;
位置;
私人我的位置我的位置;
字符串n;
双经度;
双纬度;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
SharedData=SharedData.getInstance();
mapView=新mapView(即“apyKey”);
mapView.setClickable(真);
setContentView(地图视图);
_活动=此;
LocationManager lm=(LocationManager)getSystemService(Context.LOCATION\u服务);
Location Location=lm.getLastKnownLocation(LocationManager.NETWORK\u提供程序);
longitude=location.getLongitude();
纬度=位置。getLatitude();
双src_lat=纬度;
双src_long=经度;
双目的地纬度=38.1267303;
双目标长=13.3466097;
String n=String.valueOf(src_long);
Log.d(“asd”,n);
如果(src|u lat==-1 | | src|u long==-1 | | dest|u lat==-1 | | dest|u long==-1){
showAlert(“请输入源点和目标点”);
}否则{
srcGeoPoint=新的地质点((int)(src_lat*1E6),(int)(src_long*1E6));
dest GeoPoint=新的地质点((int)(dest_lat*1E6),(int)(dest_long*1E6));
List mapOverlays=mapView.getOverlays();
Drawable srcdrawable=this.getResources().getDrawable(R.Drawable.pushpin1);
CustomItemizedOverlay srcitemizedOverlay=新的CustomItemizedOverlay(srcdrawable);
//CustomItemizedOverlay srciitemizedoverlay=新的CustomItemizedOverlay(getDrawable(“com/agarwal/route/pin_green.png”);
OverlayItem srcoverlayitem=新的OverlayItem(srcGeoPoint,“您好!”,“这是您的位置”);
Drawable destdrawable=this.getResources().getDrawable(R.Drawable.pushpin1);
CustomItemizedOverlay destinitemizedoverlay=新的CustomItemizedOverlay(destdravable);
//CustomItemizedOverlay destinitemizedoverlay=新的CustomItemizedOverlay(getDrawable(“com/agarwal/route/pin_red.png”);
OverlayItem destoverlayitem=新的OverlayItem(destGeoPoint,“你好!”,“这是dest位置”);
srcitemizedOverlay.addOverlay(srcoverlayitem);
desttemizedoverlay.addOverlay(destoverlayitem);
添加(srcitemizedOverlay);
mapOverlays.add(目标化覆盖);
connectAsyncTask_connectAsyncTask=新建connectAsyncTask();
_connectAsyncTask.execute();
mapView.SetBuilTinZoomControl(真);
mapView.DisplayZoomControl(真);
mOverlays=mapView.getOverlays();
mapView.getController().animateTo(srcGeoPoint);
mapView.getController().setZoom(12);
}
}
@凌驾
受保护的布尔值isRouteDisplayed(){
//TODO自动生成的方法存根
返回false;
}
//时代私人小学
私有类connectAsyncTask扩展了AsyncTask{
私有进程对话;
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
progressDialog=新建progressDialog(_活动);
setMessage(“Caricamento del percorso…”);
progressDialog.setUndeterminate(true);
progressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
fetchData();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
如果(doc!=null){
叠加ol=新的MyOverlay(_活动,srcGeoPoint,srcGeoPoint,1);
添加(ol);
NodeList _NodeList=doc.getElementsByTagName(“状态”);
Node node1=_nodelist.item(0);
字符串_status1=node1.getChildNodes().item(0.getNodeValue();
如果(_status1.equalsIgnoreCase(“OK”)){
NodeList_NodeList_path=doc.getElementsByTagName(“概述”多段线);
节点路径=\u节点列表路径。项(0);
元素状态路径=(元素)节点路径;
NodeList\u NodeList\u destination\u path=\u status\u path.getElementsByTagName(“点”);
Node\u nodelist\u dest=\u nodelist\u destination\u path.item(0);
字符串_path=_nodelist_dest.getChildNodes().item(0.getNodeValue();
列表_地质点=解码多边形(_路径);
地质点gp1;
地质点gp2;
gp2=_地质点。获取(0);
Log.d(“_geopoints”,”:“+_geopoints.size());
对于(inti=1;i>1):(结果>>1));
lat+=dlat;
移位=0;
结果=0;
做{
b=编码的.charAt(索引++)-63;
结果|=(b&0x1f)=0x20);
int-dlng=((结果&1)!=0?~(结果>>1):(结果>>1));
液化天然气+=液化天然气;
地质点p=新的地质点((int)((双)纬度/1E5)*1E6),
(国际)(双)液化天然气/1E5)*1E6);
poly.add(p);
}
返回多边形;
}
私有void showAlert(字符串消息){
AlertDialog.Builder alert=新建AlertDialog.Builder(_活动);
警报。设置标题(“错误”);
警报。可设置可取消(错误);
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
locationManager.requestLocationUpdates(provider, 1000, 10, locationListener);
Location location = locationManager.getLastKnownLocation(provider);