Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Ejemplo sencillo de OSMDroid requerido

Estoy intentando crear una aplicación que utilice mapas sin conexión y mosaicos personalizados. Para esto he decidido utilizar OSMDroid y han incluido el tarro dentro de mi proyecto. Creare mis azulejos de encargo usando MOBAC.

Me han dirigido a estos ejemplos: http://code.google.com/p/osmdroid/source/browse/#svn%2Ftrunk%2FOpenStreetMapViewer%2Fsrc%2Forg%2Fosmdroid%2Fsamples

  • ¿Cómo puedo ver el archivo de preferencias compartidas con Android Studio?
  • ¿Puedo cancelar Toast anterior cuando quiero mostrar otro Toast?
  • ¿El cursor SQLite de Android carga todos los registros en la memoria a la vez?
  • Androide. Cómo reproducir video en Surface (OpenGL)
  • El bluetooth androide no puede conectarse
  • Android: impresión Bluetooth
  • Pero estoy luchando para seguir como soy nuevo en java y android.

    He creado un archivo de clase llamado test (que he creado siguiendo un ejemplo!):

    public class test extends Activity { /** Called when the activity is first created. */ protected static final String PROVIDER_NAME = LocationManager.GPS_PROVIDER; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView map = (MapView) findViewById(R.id.map); map.setTileSource(TileSourceFactory.MAPQUESTOSM); map.setBuiltInZoomControls(true); map.setMultiTouchControls(true); map.getController().setZoom(16); map.getController().setCenter(new GeoPoint(30266000, -97739000)); } 

    }

    Con un archivo de diseño:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <org.osmdroid.views.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" tilesource="MapquestOSM" android:layout_weight="1" /> </LinearLayout> 

    Cuando ejecuto esto no veo ningún mapa, sólo una cuadrícula vacía. Creo que esto es debido a mi tilesource pero no estoy seguro de lo que necesito para cambiarlo.

    ACTUALIZACIÓN: También tengo lo siguiente en mi archivo de manifiesto:

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    ¿Alguien puede ayudar?

    Bex

    Solución Asegúrese de que la posición de los permisos esté en el lugar correcto en el manifiesto.

  • ¿Cómo obtener el recuento de filas de una consulta en Android usando SQLite?
  • Android NDK: Cómo obtener la arquitectura del compilador en Android.mk dinámicamente
  • ¿Cómo decirle a ProGuard que ofusque métodos y nombres de clase?
  • Actualizar una actividad del servicio cuando está activo
  • Depuración de Android NDK, bajo windows
  • Captura de imagen mientras el dispositivo está bloqueado con contraseña
  • 6 Solutions collect form web for “Ejemplo sencillo de OSMDroid requerido”

    Este trabajó para mí:

     setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); 

    como se hizo:

     setTileSource(TileSourceFactory.MAPNIK); 

    No necesitaba tener nada en el XML

    Está volviendo a ser ahora, tuve que añadir uno de estos:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

    Al archivo manifest.xml.

    No puedo recordar cuál era necesario pero si usted pone todos los 3 adentro, debe trabajar.

    Bueno, aquí está mi fuente completa, que acabo de ejecutar en el emulador:

     package com.nbt.osmdroidtest; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapController; import org.osmdroid.views.MapView; import android.app.Activity; import android.os.Bundle; public class OsmDroidTest extends Activity { /** Called when the activity is first created. */ private MapController mapController; private MapView mapView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView) findViewById(R.id.mapview); mapView.setTileSource(TileSourceFactory.MAPNIK); mapView.setBuiltInZoomControls(true); mapController = mapView.getController(); mapController.setZoom(15); GeoPoint point2 = new GeoPoint(51496994, -134733); mapController.setCenter(point2); } protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } } 

    Déle un minuto o así que cargar, ya que inicialmente podría ser bastante lento en la construcción de una memoria caché. Esas coordenadas deberían ponerlo en el centro de Londres. Si todavía tiene problemas, vea si hay algo que ilumine en el logcat.

    Y el archivo main.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <org.osmdroid.views.MapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout> 

    Para evitar el crash bubbly tenía, debes agregar osmdroid-android.jar y slf4j-android.jar a libs en tu proyecto. Ver Simple osmdroid aplicación no funciona para más detalles

      final MapView mapView = new MapView(this, 256); mapView.setBuiltInZoomControls(true);//显示缩放按钮 //display the zoom button mapView.setMultiTouchControls(true);//开启多点触控 //turn on the multiple touch feature mapView.getController().setZoom(13); mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); mapView.getController().setCenter(new GeoPoint(39.9,116.3));//设置中心点 //set the center //定位当前位置 // locate to current position myLocationOverlay = new MyLocationOverlay(getApplicationContext(), mapView); mapView.getOverlays().add(myLocationOverlay); myLocationOverlay.enableCompass(); myLocationOverlay.enableMyLocation(); myLocationOverlay.enableFollowLocation(); 

    Creo que al mirar otras muestras, se pierden permisos. A menos que el mapa ya esté en caché en su dispositivo, definitivamente necesita acceder a INTERNET. Prueba este conjunto:

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    buena suerte

    ** Tenga en cuenta que si está orientado a dispositivos Android> = 6.0 (SDK> = 23), debe comprobar si hay permisos "peligrosos" en tiempo de ejecución. Los permisos peligrosos necesarios para osmdroid son: WRITE_EXTERNAL_STORAGE y ACCESS_COARSE_LOCATION / ACCESS_FINE_LOCATION. Consulte esta implementación

    Toma de: "Cómo usar la biblioteca osmdroid" – link

    He integrado el mapa OSM en mi aplicación. La clase siguiente se utiliza 1.OSMMap actividad 2.OSMMap ItemizedOverlay Tres jar tiene que copiar en la carpeta lib de Proyecto-> App-> lib OSMBonusPack-v5.8.1-sources (1) .jar osmdroid-android-4.3.jar slf4j-android -1.5.8.jar Actividad 1.OSMmap

      public class OSMMap extends Activity { MapView mapView; MapController mapController; private double latitude; private double longitude; String date,time,vname; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_osmmap2); //Coming Parameter is from vehicleinfo activity Intent intent=getIntent(); Bundle bundle=intent.getExtras(); latitude = Double.parseDouble(bundle.getString("lat")); Log.i("CPA","In the OSM map method"+latitude); longitude = Double.parseDouble(bundle.getString("lng")); Log.i("CPA","In the OSM map method"+longitude); date = bundle.getString("date"); Log.i("CPA","In the OSM map method"+date); time = bundle.getString("time"); Log.i("CPA","In the OSM map method"+time); vname = bundle.getString("vname"); Log.i("CPA","In the OSM map method"+vname); mapView= (MapView) findViewById(R.id.mapview); mapView.setTileSource(TileSourceFactory.MAPNIK); // mapView.setTileSource(TileSourceFactory.BASE_OVERLAY_NL); // mapView.setTileSource(TileSourceFactory.CYCLEMAP); // mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); // mapView.setTileSource(TileSourceFactory.BASE); // mapView.setTileSource(TileSourceFactory.MAPQUESTOSM); // mapView.setTileSource(TileSourceFactory.MAPQUESTAERIAL); mapView.setBuiltInZoomControls(true); mapView.setMultiTouchControls(true); mapController= (MapController) mapView.getController(); Log.i("CPA","In the map view"+mapView); // GeoPoint geoPoint=new GeoPoint(40.712784,-74.005941); GeoPoint geoPoint=new GeoPoint(latitude,longitude); Log.i("CPA","In the OSM map method"+latitude); Log.i("CPA","In the OSM map method"+longitude); mapController.setZoom(8); mapController.animateTo(geoPoint); Log.i("CPA","In the OSM map method"+geoPoint); Log.i("CPA","In the OSsM map method"); List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.blue_marker); OSMDemo itemizedoverlay = new OSMDemo(drawable,this); itemizedoverlay.setEnabled(true); OverlayItem overlayItem=new OverlayItem("Vehicle"+time,"VEHICLE NO"+date,geoPoint); mapView.getController().setZoom(18); mapView.getController().setCenter(geoPoint); itemizedoverlay.addOverlay(overlayItem); mapOverlays.add(itemizedoverlay); mapView.getOverlays().add(itemizedoverlay); mapView.setMultiTouchControls(true); } } 

    2.OSM ItemizedOverlay

     public class OSMDemo extends ItemizedOverlay<OverlayItem> { static ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; public OSMDemo(Drawable pDefaultMarker, Context context) { super(pDefaultMarker,new DefaultResourceProxyImpl(context)); mContext=context; } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(0); } @Override public int size() { return mOverlays.size(); } @Override public boolean onSnapToItem(int i, int i1, Point point, IMapView iMapView) { return false; } public boolean ontap(int index) { Log.i("CPA","In the OSMDEMO ONTAP"); OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.