我正试图在Android上的Google Map上绘制poligon。要绘制多边形,我使用mMap.setOnMapLongClickListener
在Google地图上添加了多个标记,并使用循环连接它们。我成功了。但setOnMapLongClickListener
不适用于Android升级版(6.0)。
我添加了我的代码。
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。
让我知道如何让用户在Google地图上为Android中的每个版本添加标记。
答案 0 :(得分: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());
}
});
}
}
}
}