Get Location form GPS and set marker on google maps in android -
hi trying getting location(latitude , longitude) gps , set marker on google map not working.in code trying latitude , longitude gps location listener method onlocationchanged method never calling not showing toast.
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 access location data. please allow in app settings 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 file this
<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" /> <!-- api key google maps-based apis defined string resource. (see file "res/values/google_maps_api.xml"). note api key linked encryption key used sign apk. need different api key each encryption key, including release key used sign apk publishing. can define keys debug , release targets in src/debug/ , 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: auto-generated add google play services project app indexing. see https://g.co/appindexing/androidstudio 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>
your code works perfect. have move device in place gps available, because place testing app may not have exposure gps satellite. onlocationchanged() called once gps detected device
Comments
Post a Comment