zeigt habe ich ein Fragment-Klasse, die ein MapView
enthält.Google Map Fragment nicht aktuellen Standort Schaltfläche
Es funktioniert gut, ist das einzige Problem, das es nicht die aktuelle Standort-Taste nicht zeigt, i es wahr gesetzt:
nMap = mapView.getMap();
nMap.setMyLocationEnabled(true);
nMap.getUiSettings().setZoomControlsEnabled(true);
und ich hinzufügen, Berechtigungen in meinem Manifest XML-Datei:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
aber es hat das Problem nicht gelöst.
mapView = (MapView) rootView.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
if (mapView != null) {
nMap = mapView.getMap();
nMap.setMyLocationEnabled(true);
nMap.getUiSettings().setZoomControlsEnabled(true);
mClusterManager = new ClusterManager<>(this.getActivity(), nMap);
nMap.setOnCameraChangeListener(mClusterManager);
nMap.setOnMarkerClickListener(mClusterManager);
}
Update 1:
Das ist sehr seltsam ich diesen Code implementiert:
public class MainFragment extends Fragment implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener {
//Define Variables that necessary for app
CameraUpdate update;
JSONArray array;
ClusterManager<ItemCluster> mClusterManager;
View rootView;
ItemCluster offsetItem;
MapView mapView;
GoogleMap nMap;
GoogleApiClient mLocationClient;
/*
the Constructor of Main Fragment that get the JSON array as input from AsyncTask
which download the JSON file from Meteoapps website
*/
@SuppressLint("ValidFragment")
public MainFragment(JSONArray input) {
array = input;
}
//----Default constructor
public MainFragment() {
}
// Create the view when the fragment initialized
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
mapView = (MapView) rootView.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
return rootView;
}
@Override
public void onMapReady(GoogleMap googleMap) {
if (mapView != null) {
nMap = googleMap;
nMap.setMyLocationEnabled(true);
nMap.getUiSettings().setZoomControlsEnabled(true);
mClusterManager = new ClusterManager<>(this.getActivity(), nMap);
mClusterManager.setRenderer(new OwnIconRendered(getActivity().getApplicationContext(), nMap, mClusterManager));
nMap.setOnCameraChangeListener(mClusterManager);
nMap.setInfoWindowAdapter(mClusterManager.getMarkerManager());
nMap.setOnMarkerClickListener(mClusterManager);
mLocationClient = new GoogleApiClient.Builder(getActivity())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mLocationClient.connect();
Location currentlocation = LocationServices.FusedLocationApi
.getLastLocation(mLocationClient);
}
i die getLastLocation wissen Problem verursachen kann in diesem Fall aber nicht, weil ich den Code anprobiert ein anderer Code und es funktioniert, dann, wenn ich versuche, mich abzumelden currentlocation.getLatitude()
ich stelle diesen Fehler:
System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
Können Sie die Änderungen, die Sie vorgenommen haben, näher erläutern? – Sufian
@Sufian Ich benutzte so: 'mapView = (MapView) rootView.findViewById (R.id.map); mapView.onCreate (savedInstanceState); if (mapView! = Null) { nMap = mapView.getMap(); nMap.setMyLocationEnabled (true); nMap.getUiSettings(). SetZoomControlsEnabled (true); mClusterManager = neuer ClusterManager <> (this.getActivity(), nMap); nMap.setOnCameraChangeListener (mClusterManager); nMap.setOnMarkerClickListener (mClusterManager); } '' Wenn – Blacksword
OnMapReadyCallback' nur gibt es 24 auf API, dann wird es nie 23 auf API aufgerufen werden Was war Android-Version auf dem Gerät/Emulator Sie getestet? – Sufian