Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid GPS works on tablet, it doesn't on smartphone
    primarykey
    data
    text
    <p>I'm trying to create and draw the route from the current device position to a defined destination. When i test the app on a Tablet, it works well. But when i test it on smartphone, it crashes. Here's the code that i wrote:</p> <pre><code> public class RoutePath extends MapActivity { /** Called when the activity is first created. */ MapView mapView; private RoutePath _activity; GeoPoint srcGeoPoint,destGeoPoint; private static List&lt;Overlay&gt; mOverlays; MapController mc; Location location; private MyLocationOverlay myLocationOverlay; String n; double longitude; double latitude; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar bar = getActionBar(); bar.setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar)); SharedData data = SharedData.getInstance(); mapView = new MapView(this,"***MAP KEY*****"); mapView.setClickable(true); setContentView(mapView); _activity = this; LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);//work with network 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&lt;Overlay&gt; 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&lt;Void, Void, Void&gt;{ 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&lt;GeoPoint&gt; _geopoints = decodePoly(_path); GeoPoint gp1; GeoPoint gp2; gp2 = _geopoints.get(0); Log.d("_geopoints","::"+_geopoints.size()); for(int i=1;i&lt;_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("&amp;destination=");//to urlString.append( Double.toString((double)destGeoPoint.getLatitudeE6()/1.0E6 )); urlString.append(","); urlString.append( Double.toString((double)destGeoPoint.getLongitudeE6()/1.0E6 )); urlString.append("&amp;sensor=true&amp;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&lt;GeoPoint&gt; decodePoly(String encoded) { List&lt;GeoPoint&gt; poly = new ArrayList&lt;GeoPoint&gt;(); int index = 0, len = encoded.length(); int lat = 0, lng = 0; while (index &lt; len) { int b, shift = 0, result = 0; do { b = encoded.charAt(index++) - 63; result |= (b &amp; 0x1f) &lt;&lt; shift; shift += 5; } while (b &gt;= 0x20); int dlat = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charAt(index++) - 63; result |= (b &amp; 0x1f) &lt;&lt; shift; shift += 5; } while (b &gt;= 0x20); int dlng = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 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"); } } </code></pre> <p>I guess that the problem could be the high RAM's use, because im' trying to create a route between two places away over 1200 km, and so the tablet RAM can bear this process, but not the smartphone. The Android version that i'm using to test is 4.0.3, both on the tablet than on smartphone. Any suggestions?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload