您好我想獲取位置(經度和緯度)從Gps和谷歌地圖上設置標記,但它不工作。在此代碼中,我試圖獲得緯度和來自GPS位置監聽器方法onLocationChanged的經度,但此方法從不調用不顯示任何吐司。獲取位置形式的GPS和設置在谷歌地圖上的標記android
public class MapsFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnMapLoadedCallback {
private static View view;
private SupportMapFragment mMap;
private static Double latitude = 28.6538100, longitude = 77.2289700;
GoogleMap gMap;
private static final int PERMISSION_REQUEST_CODE = 1;
private MinDisLocationListener locationListener;
private LocationManager lm;
public MapsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FragmentManager fm = getActivity().getSupportFragmentManager();
SupportMapFragment mMapFragment = (SupportMapFragment) getActivity()
.getSupportFragmentManager().findFragmentById(R.id.map);
locationListener = new MinDisLocationListener();
lm = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 2, this.locationListener);
} else {
requestPermission();
}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 2, this.locationListener);
if (mMapFragment == null) {
mMapFragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map, mMapFragment).commit();
mMapFragment.getMapAsync(this);
}
view = inflater.inflate(R.layout.fragment_map, container, false);
return view;
}
@Override
public void onMapReady(GoogleMap map) {
gMap = map;
gMap.setOnMapLoadedCallback(this);
// drawMarker(latitude, longitude);
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new
LatLng(49.39, -124.83), 20));
gMap.addMarker(new MarkerOptions()
.position(new LatLng(37.7750, 122.4183))
.title("San Francisco")
.snippet("Population: 776733"));
gMap.getUiSettings().setZoomGesturesEnabled(true);
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
gMap.setMyLocationEnabled(true);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 2, this.locationListener);
} else {
requestPermission();
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();
mMap = (SupportMapFragment) fm.findFragmentById(R.id.map);
if (mMap != null) {
mMap = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map, mMap).commit();
mMap.getMapAsync(this);
}
}
private void requestPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {
Toast.makeText(getActivity(), "GPS permission allows us to access location data. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE);
}
}
public void drawMarker(double lat, double lon) {
if (gMap != null) {
MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lon)).title(" Maps Tutorial").snippet("Android Ruler");
marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(latitude, longitude)).zoom(12).build();
gMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
gMap.addMarker(marker);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
gMap.setMyLocationEnabled(true);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000, 2, this.locationListener);
}
gMap.setMyLocationEnabled(true);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 2, this.locationListener);
} else {
}
break;
}
}
@Override
public void onResume() {
super.onResume();
FragmentManager fm = getChildFragmentManager();
mMap = (SupportMapFragment) fm.findFragmentById(R.id.map);
if (mMap != null) {
mMap = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.map, mMap).commit();
mMap.getMapAsync(this);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (mMap != null) {
mMap = null;
}
}
@Override
public void onMapLoaded() {
}
public class MinDisLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
Log.d("location", "onLocationChanged");
drawMarker(location.getLatitude(),location.getLongitude());
Toast.makeText(getActivity(), "onLocationChanged", Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("location", "onStatusChanged");
Toast.makeText(getActivity(), "onStatusChanged", Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderEnabled(String provider) {
Log.d("location", "onProviderEnabled");
Toast.makeText(getActivity(), "onProviderEnabled", Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Log.d("location", "onProviderEnabled");
Toast.makeText(getActivity(), "onProviderEnabled", Toast.LENGTH_SHORT).show();
}
}
}
Msnifist文件這是
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.deltastar.catchme" >
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permisssion.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
- See more at:
http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample#sthash.PtrAvZrk.dpuf
<application
android:allowBackup="true"
android:icon="@drawable/ic_logo"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".LoginActivity" />
<activity
android:name=".RegisterActivity"
android:label="@string/register" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".OtpVerifyActivity"
android:label="@string/otp_verify" />
<activity android:name=".CreateProfileActivity" />
<activity android:name=".ChatMemberActivity" />
<activity android:name=".CreateGroup" />
<activity android:name=".AddMemberGroup" />
<activity android:name=".MeatPointName" />
<activity android:name=".MyMeeting" />
<activity android:name=".ChatActivity" />
<activity android:name=".GroupInfo" />
<activity
android:name=".MapChat"
android:label="@string/title_activity_map_chat" />
<activity android:name=".MyMeatingReq" />
<activity android:name=".UserProfile" />
<activity android:name=".MyProfile" />
<activity android:name=".SplashScreen" />
<activity android:name=".Settings" />
<activity
android:name=".DrawerDemo"
android:label="@string/title_activity_drawer_demo"
android:theme="@style/AppTheme" />
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MeetingPointLocation"
android:label="@string/title_activity_create_meating_point" />
<!--
ATTENTION: This was auto-generated to add Google Play services to your project for
App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information.
-->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name=".HomePage"
android:label="@string/title_activity_home_page"
android:theme="@style/AppTheme" />
<activity android:name=".MyLocation" />
<activity android:name="com.services.LocDemo" >
</activity>
</application>
</manifest>
fragment_map.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.fragment.MapsFragment">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
請顯示清單文件 –
您可以發佈fragment_map和您的活動xml嗎? – Raghavendra