Java 无法在android studio google maps中获取标记和位置
我对android开发还很陌生,我无法获得gps的当前位置,也无法在地图上显示标记阵列 此外,我还尝试通过以下链接中的教程绘制一条带有距离和时间计算的路径: 我如何将gps坐标值、距离和持续时间以及唯一id发送到firebase实时数据库 我哪里做错了Java 无法在android studio google maps中获取标记和位置,java,android,google-maps,android-studio,Java,Android,Google Maps,Android Studio,我对android开发还很陌生,我无法获得gps的当前位置,也无法在地图上显示标记阵列 此外,我还尝试通过以下链接中的教程绘制一条带有距离和时间计算的路径: 我如何将gps坐标值、距离和持续时间以及唯一id发送到firebase实时数据库 我哪里做错了 import androidx.fragment.app.FragmentActivity; import android.annotation.SuppressLint; import android.os.Bundle; import com
import androidx.fragment.app.FragmentActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import java.lang.reflect.Array;
import java.util.ArrayList;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private Location currentLocation;
private FusedLocationProviderClient fusedLocationProviderClient;
private static final int LOCATION_REQUEST_CODE =101;
ArrayList<LatLng>arrayList=new ArrayList<LatLng>();
LatLng route1 = new LatLng(-35.016, 143.321);
LatLng route2 = new LatLng(-34.747, 145.592);
LatLng route3 = new LatLng(-34.364, 147.891);
LatLng route4 = new LatLng(-33.501, 150.217);
LatLng route5 = new LatLng(-32.306, 149.248);
LatLng route6 = new LatLng(-32.491, 147.309);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
arrayList.add(route1);
arrayList.add(route2);
arrayList.add(route3);
arrayList.add(route4);
arrayList.add(route5);
arrayList.add(route6);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(MapsActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MapsActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE);
return;
}
fetchLastLocation();
}
private void fetchLastLocation(){
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
currentLocation = location;
Toast.makeText(MapsActivity.this,currentLocation.getLatitude()+" "+currentLocation.getLongitude(),Toast.LENGTH_SHORT).show();
SupportMapFragment supportMapFragment= (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
supportMapFragment.getMapAsync(MapsActivity.this);
}else{
Toast.makeText(MapsActivity.this,"No Location recorded",Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
for (int i = 0; i < arrayList.size(); i++) {
mMap.addMarker(new MarkerOptions().position(arrayList.get(i)).title("Marker"));
LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
//MarkerOptions are used to create a new Marker.You can specify location, title etc with MarkerOptions
MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("You are Here");
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
//Adding the created the marker on the map
googleMap.addMarker(markerOptions);
}
@SuppressLint("NeedOnRequestPermissionsResult")
@Override
public void onRequestPermissionsResult ( int requestCode, String[] permissions,int[] grantResult){
switch (requestCode) {
case LOCATION_REQUEST_CODE:
if (grantResult.length > 0 && grantResult[0] == PackageManager.PERMISSION_GRANTED) {
fetchLastLocation();
} else {
Toast.makeText(MapsActivity.this, "Location permission missing", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
}
导入androidx.fragment.app.FragmentActivity;
导入android.annotation.SuppressLint;
导入android.os.Bundle;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.OnMapReadyCallback;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.MarkerOptions;
导入java.lang.reflect.Array;
导入java.util.ArrayList;
公共类MapsActivity扩展了FragmentActivity在MapReadyCallback上的实现{
私有谷歌地图;
私人位置;
私有FusedLocationProviderClient FusedLocationProviderClient;
私有静态最终整数位置\请求\代码=101;
ArrayList=新的ArrayList();
LatLng路线1=新LatLng(-35.016143.321);
LatLng路线2=新LatLng(-34.747145.592);
LatLng路线3=新LatLng(-34.364147.891);
LatLng路线4=新LatLng(-33.501150.217);
LatLng路线5=新LatLng(-32.306,149.248);
LatLng路线6=新LatLng(-32.491147.309);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_映射);
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
arrayList.add(路由1);
arrayList.add(route2);
arrayList.add(路由3);
arrayList.add(路由4);
arrayList.add(路由5);
arrayList.add(路由6);
fusedLocationProviderClient=LocationServices.getFusedLocationProviderClient(此);
if(ActivityCompat.checkSelfPermission(mapsacitivity.this,android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(mapsacitivity.this,android.Manifest.permission.ACCESS\u rough\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(这个新字符串[]{android.Manifest.permission.ACCESS\u FINE\u LOCATION},LOCATION\u REQUEST\u CODE);
返回;
}
fetchLastLocation();
}
私有void fetchLastLocation(){
Task Task=fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
当前位置=位置;
Toast.makeText(MapsActivity.this,currentLocation.getLatitude()+“”+currentLocation.getLatitude(),Toast.LENGTH_SHORT).show();
SupportMapFragment SupportMapFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
supportMapFragment.getMapAsync(MapsActivity.this);
}否则{
Toast.makeText(MapsActivity.this,“未记录位置”,Toast.LENGTH_SHORT.show();
}
}
});
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
对于(int i=0;i0&&grantResult[0]==已授予PackageManager.PERMISSION){
fetchLastLocation();
}否则{
Toast.makeText(MapsActivity.this,“缺少位置权限”,Toast.LENGTH_SHORT.show();
}
打破
}
}
}
}
您已经定义了两次SupportMapFragment请检查我的代码是否正常运行我已经运行了代码并解决了错误
导入android.content.pm.PackageManager;
导入android.location.location;
导入android.os.Bundle;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.core.app.ActivityCompat;
导入androidx.fragment.app.FragmentActivity;
导入com.google.android.gms.location.FusedLocationProviderClient;
导入com.google.android.gms.location.LocationServices;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.OnMapReadyCallback;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.MarkerOptions;
导入com.google.android.gms.tasks.OnSuccessListener;
导入com.google.android.gms.tasks.Task;
导入java.util.ArrayList;
公共类MapsActivity扩展了FragmentActivity实现