I am trying to draw poligon on Google Map in android. To draw the polygon I added multiple marker on Google Map using mMap.setOnMapLongClickListener
and connected those using a loop. I did it successfully. But the setOnMapLongClickListener
is not working for Android Upgraded Version(6.0).
I added my 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());
}
});
I added map fragment within FrameLayout
. Here is xml code
<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>
I tested this code. It worked for Android Version upto 5.0.
Let me know how can I enable user to add marker on google map for every version in Android.
I found the solution. The problem was related to permissions allowance in android 6.0+. I added permission checking
and this solved my problem. Menifest permission is not enough for 6 and 6+ android.
Here is my 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);
}
and
@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());
}
});
}
}
}
}