-1

Google지도에서 Android로 poligon을 그리려고합니다. 다각형을 그리려면 mMap.setOnMapLongClickListener을 사용하여 Google Map에 여러 마커를 추가하고 루프를 사용하여 마커를 연결했습니다. 나는 그것을 성공적으로했다. 그러나 setOnMapLongClickListener은 Android 업그레이드 버전 (6.0)에서 작동하지 않습니다.안드로이드에서 모든 버전에 대해 setOnMapLongClickListener를 사용하여 Google지도에 마커를 추가하십시오.

내 코드를 추가했습니다.

mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
      @Override 
      public void onMapLongClick(LatLng latLng) { 
       mMap.addMarker(new MarkerOptions().position(new LatLng(latLng.latitude, latLng.longitude)).title("Marker of Finder")); 
       // data formating for server 
       JSONArray coordinateJsonArray = new JSONArray(); 
       try { 
        coordinateJsonArray.put(latLng.longitude); 
        coordinateJsonArray.put(latLng.latitude); 
       } catch (JSONException e) { 

       } 
       list.add(coordinateJsonArray); 
       markers.add(new LatLng(latLng.latitude, latLng.longitude)); 
       if (markers.size() > 2) { 
        removeGeofenceImageButton.setVisibility(View.VISIBLE); 
        for (int i = 0; i < markers.size() - 1; i++) { 

         polygon3 = mMap.addPolygon(new PolygonOptions() 
           .add(new LatLng(markers.get(i).latitude, markers.get(i).longitude), 
             new LatLng(markers.get(i + 1).latitude, markers.get(i + 1).longitude), 
             new LatLng(markers.get(0).latitude, markers.get(0).longitude)) 
           .strokeColor(0x82662d91) 
           .fillColor(0x82662d91) 
           .strokeWidth(1) 
         ); 
        } 
       } 
       Log.d("Polygone", markers.toString()); 
      } 
     }); 

FrameLayout 내에지도 조각을 추가했습니다. 다음은 XML 코드입니다.

<FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/mapLayout" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <fragment 
      android:id="@+id/map" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:longClickable="true" 
      tools:context="com.finder.gps.tracker.activity.MainActivity" /> 

     <!--<ImageButton--> 
      <!--android:id="@+id/remove"--> 
      <!--android:layout_width="wrap_content"--> 
      <!--android:layout_height="wrap_content"--> 
      <!--android:layout_gravity="right|center"--> 
      <!--android:background="@color/background"--> 
      <!--app:srcCompat="@android:drawable/ic_delete" />--> 



     <Button 
      android:id="@+id/add_geofence" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:background="#c7ffffff" 
      android:text="Add Geofence" 
      android:textColor="@color/black" /> 

    </FrameLayout> 

이 코드를 테스트했습니다. 그것은 안드로이드 버전 5.0 개까지 작동했습니다.

Android에서 모든 버전의 Google지도에 마커를 추가하는 방법을 알려주세요.

+0

내가 볼 수있는 누군가가 다운이 질문에 투표했다. 저기 투표의 이유를 알려주십시오. 이 질문에 문제가 있거나이 질문을 개선해야합니까? – anuradha

답변

0

해결책을 찾았습니다. 이 문제는 android 6.0+에서 허용 한도와 관련이 있습니다. 나는 permission checking을 추가했고 이것이 나의 문제를 해결했다. Menifest 권한으로 6, 6+ android에 충분하지 않습니다.

다음

내 솔루션입니다 .......

boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; 

     if (permissionGranted) { 
      // {Some Code} 
      mMap.setMyLocationEnabled(true); 

      mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
       @Override 
       public void onMapLongClick(LatLng latLng) { 
        mMap.addMarker(new MarkerOptions().position(new LatLng(latLng.latitude, latLng.longitude)).title("Marker of Finder")); 
        JSONArray coordinateJsonArray = new JSONArray(); 
        try { 
         coordinateJsonArray.put(latLng.longitude); 
         coordinateJsonArray.put(latLng.latitude); 
        } catch (JSONException e) { 

        } 
        list.add(coordinateJsonArray); 
        markers.add(new LatLng(latLng.latitude, latLng.longitude)); 
        if (markers.size() > 2) { 
//     removeGeofenceImageButton.setVisibility(View.VISIBLE); 
         for (int i = 0; i < markers.size() - 1; i++) { 

          polygon3 = mMap.addPolygon(new PolygonOptions() 
            .add(new LatLng(markers.get(i).latitude, markers.get(i).longitude), 
              new LatLng(markers.get(i + 1).latitude, markers.get(i + 1).longitude), 
              new LatLng(markers.get(0).latitude, markers.get(0).longitude)) 
            .strokeColor(0x82662d91) 
            .fillColor(0x82662d91) 
            .strokeWidth(1) 
          ); 
         } 
        } 
        Log.d("Polygone", markers.toString()); 
       } 
      }); 
     } else { 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200); 
     } 

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) { 
      case 200: { 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // {Some Code} 
        Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show(); 

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
         // TODO: Consider calling 
         // ActivityCompat#requestPermissions 
         // here to request the missing permissions, and then overriding 
         // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
         //           int[] grantResults) 
         // to handle the case where the user grants the permission. See the documentation 
         // for ActivityCompat#requestPermissions for more details. 
         return; 
        } 
        mMap.setMyLocationEnabled(true); 

        mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
         @Override 
         public void onMapLongClick(LatLng latLng) { 
          mMap.addMarker(new MarkerOptions().position(new LatLng(latLng.latitude, latLng.longitude)).title("Marker of Finder")); 
          JSONArray coordinateJsonArray = new JSONArray(); 
          try { 
           coordinateJsonArray.put(latLng.longitude); 
           coordinateJsonArray.put(latLng.latitude); 
          } catch (JSONException e) { 

          } 
          list.add(coordinateJsonArray); 
          markers.add(new LatLng(latLng.latitude, latLng.longitude)); 
          if (markers.size() > 2) { 
//     removeGeofenceImageButton.setVisibility(View.VISIBLE); 
           for (int i = 0; i < markers.size() - 1; i++) { 

            polygon3 = mMap.addPolygon(new PolygonOptions() 
              .add(new LatLng(markers.get(i).latitude, markers.get(i).longitude), 
                new LatLng(markers.get(i + 1).latitude, markers.get(i + 1).longitude), 
                new LatLng(markers.get(0).latitude, markers.get(0).longitude)) 
              .strokeColor(0x82662d91) 
              .fillColor(0x82662d91) 
              .strokeWidth(1) 
            ); 
           } 
          } 
          Log.d("Polygone", markers.toString()); 
         } 
        }); 
       } 
      } 
     } 
    } 
관련 문제