xamarin - Google map Geocoder And MoveToRegion not working -


i' have strange issue xamarin.forms.maps. i'm trying implement page map current location , move region @ page start.

all working fine in ios, in android, geocoder & movetoregion not working @ all. map displayed.

i retrieve location correctly (long & lat ) in emulators & device. movetoregion nothing & getaddressesforpositionasync retrive nothing.

here information in manifest :

<meta-data android:name="com.google.android.maps.v2.api_key" android:value="mykey" />         <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />  <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="com.google.android.providers.gsf.permission.read_gservices" /> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="android.permission.access_fine_location" /> <uses-permission android:name="android.permission.access_coarse_location" /> <uses-permission android:name="android.permission.access_location_extra_commands" /> <uses-permission android:name="android.permission.access_mock_location" /> <uses-permission android:name="android.permission.access_network_state" /> <uses-permission android:name="android.permission.access_wifi_state" /> 

here code :

map.movetoregion(mapspan.fromcenterandradius(                 new xamarin.forms.maps.position(coordinates.lat.value, coordinates.lng.value), distance.frommiles(1))             );          var possibleaddresses = await locator.getaddressesforpositionasync(position); 

i tried in genymotion, emulator avd. i'm not able test in real device ( deployment fail in tablet )

edit :

global::xamarin.forms.forms.init(this, bundle); 

was correctly set still not working.

i force geocoder usage , thrown error :

[monodroid] unhandled exception: [monodroid] java.io.ioexception: grpc failed [monodroid]   @ system.runtime.exceptionservices.exceptiondispatchinfo.throw () [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ java.interop.jnienvironment+instancemethods.callobjectmethod (java.interop.jniobjectreference instance, java.interop.jnimethodinfo method, java.interop.jniargumentvalue* args) [0x00069] in <6cd960837cc24c26bab2a0a29b597627>:0  [monodroid]   @ java.interop.jnipeermembers+jniinstancemethods.invokeabstractobjectmethod (system.string encodedmember, java.interop.ijavapeerable self, java.interop.jniargumentvalue* parameters) [0x00014] in <6cd960837cc24c26bab2a0a29b597627>:0  [monodroid]   @ android.locations.geocoder.getfromlocationname (system.string locationname, system.int32 maxresults) [0x0003c] in <d278c06ad5684d6882c743a94a93ebc2>:0  [monodroid]   @ android.locations.geocoder+<>c__displayclass17_0.<getfromlocationnameasync>b__0 () [0x00000] in <d278c06ad5684d6882c743a94a93ebc2>:0  [monodroid]   @ system.threading.tasks.task`1[tresult].innerinvoke () [0x0000f] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.threading.tasks.task.execute () [0x00010] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid] --- end of stack trace previous location exception thrown --- [monodroid]   @ system.runtime.exceptionservices.exceptiondispatchinfo.throw () [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess (system.threading.tasks.task task) [0x0003e] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification (system.threading.tasks.task task) [0x00028] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter.validateend (system.threading.tasks.task task) [0x00008] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter`1[tresult].getresult () [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ xamarin.forms.maps.android.geocoderbackend+<getpositionsforaddressasync>d__1.movenext () [0x0006b] in <39c694c022be4f7b8a39897d372b2d00>:0  [monodroid] --- end of stack trace previous location exception thrown --- [monodroid]   @ system.runtime.exceptionservices.exceptiondispatchinfo.throw () [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter.throwfornonsuccess (system.threading.tasks.task task) [0x0003e] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter.handlenonsuccessanddebuggernotification (system.threading.tasks.task task) [0x00028] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter.validateend (system.threading.tasks.task task) [0x00008] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.taskawaiter`1[tresult].getresult () [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ picaplant.views.geolocationpage+<handleadresscompleted>d__8.movenext () [0x00047] in /users/orcusz/documents/autoentrepreneur/picaplant/source/picaplant/views/geolocationpage.xaml.cs:158  [monodroid] --- end of stack trace previous location exception thrown --- [monodroid]   @ system.runtime.exceptionservices.exceptiondispatchinfo.throw () [0x0000c] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ system.runtime.compilerservices.asyncmethodbuildercore+<>c.<throwasync>b__6_0 (system.object state) [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0  [monodroid]   @ android.app.synccontext+<>c__displayclass2_0.<post>b__0 () [0x00000] in <d278c06ad5684d6882c743a94a93ebc2>:0  [monodroid]   @ java.lang.thread+runnableimplementor.run () [0x00008] in <d278c06ad5684d6882c743a94a93ebc2>:0  [monodroid]   @ java.lang.irunnableinvoker.n_run (system.intptr jnienv, system.intptr native__this) [0x00008] in <d278c06ad5684d6882c743a94a93ebc2>:0  [monodroid]   @ (wrapper dynamic-method) system.object:6621ff63-14b8-4291-a222-45bff630bddc (intptr,intptr) [monodroid]   --- end of managed java.io.ioexception stack trace --- [monodroid] java.io.ioexception: grpc failed [monodroid]     @ android.location.geocoder.getfromlocationname(geocoder.java:178) [monodroid]  

edit 2 :

same error xamarin form working maps sample

any idea ?

here's working cross-platform sample app. runs in kitkat 4.4 api level 19 emulator , in samsung android device. present custom geocoder implementation using http requests given standard 1 works fine actual android device returns empty response emulator.

enter image description here

xaml:

<?xml version="1.0" encoding="utf-8" ?> <contentpage xmlns="http://xamarin.com/schemas/2014/forms"              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"              xmlns:maps="clr-namespace:xamarin.forms.maps;assembly=xamarin.forms.maps.dll"              xmlns:local="clr-namespace:app20"              x:class="app20.mainpage">     <contentpage.content>         <grid>             <grid.rowdefinitions>                 <rowdefinition height="8*"></rowdefinition>                 <rowdefinition height="4*"></rowdefinition>                 <rowdefinition height="*"></rowdefinition>                 <rowdefinition height="*"></rowdefinition>             </grid.rowdefinitions>              <maps:map x:name="map1" grid.row="0"></maps:map>             <listview itemssource="{binding addresslist}" grid.row="1" />             <button text="move region" grid.row="2" clicked="button_clicked_move"></button>             <button text="get address" grid.row="3" clicked="button_clicked_address"></button>         </grid>     </contentpage.content> </contentpage> 

cs:

public partial class mainpage : contentpage {     myviewmodel vm;      public mainpage()     {         initializecomponent();          vm = new myviewmodel();         bindingcontext = vm;     }      private void button_clicked_move(object sender, eventargs e)     {         map1.movetoregion(mapspan.fromcenterandradius(             new position(vm.lat, vm.lon), distance.frommiles(vm.distance)));     }      private async void button_clicked_address(object sender, eventargs e)     {         geocoder gc = new geocoder();          var list = await gc.getaddressesforpositionasync(new position(vm.lat, vm.lon));          if (list.count() > 0)         {             foreach (string s in list)                 vm.addresslist.add(s);         }         else         {             mygeocoder mgc = new mygeocoder();              var mylist = await mgc.getaddressesforpositionasync(vm.lat, vm.lon, vm.key);              foreach (string s in mylist)                 vm.addresslist.add(s);         }     } } 

view model:

public class myviewmodel {     public string key { get; }     public double lat { get; set; }     public double lon { get; set; }     public double distance { get; set; }     public observablecollection<string> addresslist { get; set; }      public myviewmodel()     {         lat = 40.706501;         lon = -74.011340;         distance = 0.5;         key = "your_api_key";         addresslist = new observablecollection<string>();     } } 

custom geocoder:

public class mygeocoder {     public async task<ienumerable<string>> getaddressesforpositionasync(double lat, double lon, string key)     {         httpclient client = new httpclient();          var request = string.format(@"https://maps.googleapis.com/maps/api/geocode/json?latlng={0},{1}&key={2}", lat, lon, key);          var json = await client.getstringasync(request);          var result = jobject.parse(json)["results"];          list<string> list = new list<string>();          foreach (jtoken jt in result)             list.add((string)jt["formatted_address"]);          return list.asenumerable<string>();     } } 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -