2017-09-08 12 views
0

私はAndroid開発では初めてで、最初のプロジェクトでは難しい作業をしました。 :DAndroid:20m方法でMapMarker情報を表示

だから、バックストーリー:

私はMapActivityのMySQL DB(PHP - > JSON)からMapMarkers何を取得している

は今、私はいくつかのマークとユーザーの場所が知られているマップを持っています。

私は何をしたいですか? シンプル..ユーザーがマーカーに近づく(20メートルを言うことができます)その後、彼は彼が彼がそこにあることを提出することができます ポップアップを取得します。..

問題は、私はそれを行う方法が分からないということです。.. 私のコードは悪いですが、動作します:D。

私は速い回避策を持っています(Lenovoタブは古いAndroidのものですが、他の方法はAndroid 7.1で動作します)。

public class kaart extends FragmentActivity implements OnMapReadyCallback { 

    MapFragment mapFragment; 
    GoogleMap gMap; 
    MarkerOptions markerOptions = new MarkerOptions(); 
    CameraPosition cameraPosition; 
    LatLng center, latLng; 
    String title; 
    String kirjeldus; 
    String vahend; 

    public static final String ID = "id"; //god to use for marker detection 
    public static final String TITLE = "nimi"; 
    public static final String KIRJELDUS = "kirjeldus"; 
    public static final String LAT = "lat"; 
    public static final String LNG = "lng"; 
    public static final String VAHEND = "vahend"; 

    private String url = "https://lammerdis.ee/orient/"; 
    String tag_json_obj = "json_obj_req"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.kaart); 

     mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.kaart); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     gMap = googleMap; 
     gMap.getUiSettings().setMapToolbarEnabled(false); 
     gMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); //Võimalikud valikud MAP_TYPE_SATELLITE, MAP_TYPE_TERRAIN, MAP_TYPE_HYBRID, MAP_TYPE_NORMAL 
     gMap.getUiSettings().setZoomControlsEnabled(true); 
     gMap.getUiSettings().setCompassEnabled(true); 
     gMap.getUiSettings().setMyLocationButtonEnabled(true); 
     gMap.getUiSettings().setZoomGesturesEnabled(true); 

     // Kaardi alguse asukoha Zoomime Aida juurde 
     center = new LatLng(59.175597, 25.022103); 
     cameraPosition = new CameraPosition.Builder().target(center).zoom(10).build(); 
     googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

     getMarkers(); 

    } 

    private void addMarker(LatLng latlng, final String title, final String kirjeldus, final String vahend) { 
     markerOptions.position(latlng); 
     markerOptions.title(title); 
     markerOptions.snippet(kirjeldus); 

     if (vahend.equalsIgnoreCase("auto")) { 
      markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.auto)); 
     } else { 
      markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.jala)); } 

     gMap.addMarker(markerOptions); 

    } 

    // Korjame JSON-ist punktid kokku 
    private void getMarkers() { 
     StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       Log.e("Response: ", response.toString()); 

       try { 
        JSONObject jObj = new JSONObject(response); 
        String getObject = jObj.getString("punktid"); 
        JSONArray jsonArray = new JSONArray(getObject); 

        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 
         title = jsonObject.getString(TITLE); 
         kirjeldus = jsonObject.getString(KIRJELDUS); 
         vahend = jsonObject.getString(VAHEND); 
         latLng = new LatLng(Double.parseDouble(jsonObject.getString(LAT)), Double.parseDouble(jsonObject.getString(LNG))); 

         // Kuvame andmed kaardile 
         addMarker(latLng, title, kirjeldus, vahend); 
        } 


       } catch (JSONException e) { 
        // JSON error 
        e.printStackTrace(); 
       } 

      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e("Error: ", error.getMessage()); 
       Toast.makeText(kaart.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }); 

     AppController.getInstance().addToRequestQueue(strReq, tag_json_obj); 
     //kui punktid kaardil ja seadmes on lubatud asukohta otsida, siis kuvame kasutaja asukoha ka 
     //Kui on vanem android siis saame Manifestis kirjeldatud õigustega hakkama ja saaba sukoha kuvatud 
       if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == 
         PackageManager.PERMISSION_GRANTED && 
         ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == 
           PackageManager.PERMISSION_GRANTED) { 
        gMap.setMyLocationEnabled(true); //Kuvab asukoha punktina kaardil 
        gMap.getUiSettings().setMyLocationButtonEnabled(true); // Kuvab asukoha nupu (viskab ilusti oma asukohale) 
       } else { 
        //Kui on android 6.0 või uuem siis tuleb õiguseid küsida rakenduse käivitamisel 
        ActivityCompat.requestPermissions(this, new String[] { 
            Manifest.permission.ACCESS_FINE_LOCATION, 
            Manifest.permission.ACCESS_COARSE_LOCATION }, 
          PackageManager.PERMISSION_GRANTED); 
        //Kui õigused on lubatud siis tuleb neid rakendada, kõige lihtsam on kasutajale pasundada, et rakenduse restardiks 

        final Toast tag = Toast.makeText(this, R.string.OIGUSE_INFO, Toast.LENGTH_LONG); 
        tag.show(); 

        new CountDownTimer(50000, 1000) 
        { 
         public void onTick(long millisUntilFinished) {tag.show();} 
         public void onFinish() {tag.show();} 
        }.start(); 

     } 

    } 

} 
+0

ロケーションリスナーhttps://developer.android.com/training/location/receive-location-updates.html –

+0

Tyを使用して応答する必要があります。これまでのところ、私は書き込み方法がわかりません地図上のマーカーを検出するように範囲も20mにする必要があります。( – Jaanus

+0

OnLocationResultメソッドでは、マーカの近くにあるかどうかをチェックします https://github.com/googlesamples/android-play-location /blob/master/LocationUpdates/app/src/main/java/com/google/android/gms/location/sample/locationupdates/MainActivity.java Location.distanceto https://stackoverflow.com/questionsを使用して距離を確認できます。/28209548/android-how-to-use-location-distanceto –

答えて

0

それは、使用の問題だあなたは、ユーザーがそれを入力する領域を作成することができ、これらとジオフェンス(https://developer.android.com/training/location/geofencing.html)を設定することができますか、それはあなたがあなたの意図サービスでの意図を取得しますその情報どこを好き。

関連する問題