-1

我想在android中的Google Map上繪製poligon。要繪製多邊形,我使用mMap.setOnMapLongClickListener在Google地圖上添加了多個標記,並使用循環連接了這些標記。我成功地做到了。但setOnMapLongClickListener不適用於Android升級版本(6.0)。在Google地圖上使用setOnMapLongClickListener在Android中爲每個版本添加標記

我加了我的代碼。

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> 

我測試了這段代碼。它適用於Android版本高達5.0。

讓我知道如何讓用戶在谷歌地圖上爲Android中的每個版本添加標記。

+0

我可以看到有人下來投了這個問題。請讓我知道投票的理由。這個問題有什麼不對嗎,還是我需要改進這個問題? – anuradha

回答

0

我找到了解決方案。該問題與Android 6.0+中的權限限制有關。我添加了permission checking,這解決了我的問題。對於6和6以上的Android,Menifest權限是不夠的。

這裏是我的解決方案.......

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()); 
         } 
        }); 
       } 
      } 
     } 
    } 
相關問題