-1

J'essaie de dessiner poligon sur Google Map dans android. Pour dessiner le polygone, j'ai ajouté plusieurs marqueurs sur Google Map en utilisant mMap.setOnMapLongClickListener et connecté ceux qui utilisent une boucle. Je l'ai fait avec succès. Mais le setOnMapLongClickListener ne fonctionne pas pour Android version améliorée (6.0).Ajouter un marqueur sur Google Map en utilisant setOnMapLongClickListener dans Android pour chaque version

J'ai ajouté mon code.

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()); 
      } 
     }); 

J'ai ajouté un fragment de carte au sein de FrameLayout. Voici le code 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> 

J'ai testé ce code. Cela a fonctionné pour la version d'Android jusqu'à 5,0. Faites-moi savoir comment puis-je permettre à l'utilisateur d'ajouter un marqueur sur google map pour chaque version d'Android?

+0

Je peux voir que quelqu'un a voté vers le bas cette question. S'il vous plaît laissez-moi savoir la raison du vote à la baisse. Y a-t-il un problème avec cette question ou dois-je améliorer cette question? – anuradha

Répondre

0

J'ai trouvé la solution. Le problème était lié à la permission d'autorisations dans android 6.0+. J'ai ajouté permission checking et cela a résolu mon problème. L'autorisation manifeste n'est pas suffisante pour Android 6 et 6+.

Voici ma solution .......

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); 
     } 

et

@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()); 
         } 
        }); 
       } 
      } 
     } 
    }