2015-07-23 4 views
0

Я разработал простой браузер для Android с помощью WebView. Все работает нормально, но когда я открываю карты Google, мой браузер не может получить доступ к текущему местоположению устройства. Я не понимаю, что происходит. также в манифесте я дал разрешение ACCESS ВЫСОКОЕ РАСПОЛОЖЕНИЕ Мой код:Текущее местоположение Android с помощью WebView

@SuppressLint ("SetJavaScriptEnabled") класс MainActivity общественности расширяет активность {

@Override

защищен недействительным OnCreate (Bundle savedInstanceState) {

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final WebView ourBrow=(WebView)findViewById(R.id.wvBrowser); 
    Button bgo=(Button)findViewById(R.id.button3); 
    Button res=(Button)findViewById(R.id.button4); 
    Button gfo=(Button)findViewById(R.id.button2); 
     ourBrow.getSettings().setJavaScriptEnabled(true); 

try{ 
    ourBrow.loadUrl("https://www.google.co.in/maps/dir///@20.3464436,85.8127819,15z"); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     /*String myHtml = "<html><body>A very basic <b>WebView</b> demo!</body></html>"; 
     ourBrow.loadData(myHtml, "text/html", null);*/ 
    } 
    bgo.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(ourBrow.canGoBack()) 
       ourBrow.goBack(); 
     } 
    }); 
    gfo.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(ourBrow.canGoForward()) 
       ourBrow.goForward(); 
     } 
    }); 

res.setOnClickListener (новый View.OnClickListener() {

 @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      ourBrow.loadUrl("https://www.google.co.in/maps/dir///@20.3464436,85.8127819,15z"); 
     } 
    }); 
    } 
    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
    @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 
+0

Никто не поймет и не поможет вам, если вы не разместите свой код, объясняя проблемную область! – AADProgramming

+0

Добро пожаловать в переполнение стека! Как бы то ни было, может быть много причин, почему это происходит; лучше всего предоставить нам [Минимальный, полный, проверенный пример] (https://stackoverflow.com/help/mcve) при задании вопросов. Это помогает нам помочь вам. Как примечание, вы правильно установили права? –

+0

спасибо, сэр, я новичок в переполнении стека –

ответ

2
  • JavaScript должен быть включен в WebView, используя WebSettings.setJavaScriptEnabled(true); Приложение требуется разрешение ACCESS_FINE_LOCATION WebView должны использовать пользовательские WebChromeClient , который реализует WebChromeClient.onGeolocationPermissionsShowPrompt(). Этот метод вызывается WebView для получения разрешения на раскрытие местоположения пользователя на JavaScript. (В случае браузера мы показываем пользователю ). Реализация по умолчанию ничего не делает, поэтому разрешение так и не было получено, и местоположение никогда не передается JavaScript. webView.setWebChromeClient(new WebChromeClient() { public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); } });

Геолокация использует базы данных для сохранения кэшированных позиций и разрешений между сеансами. Расположение базы данных задается с помощью WebSettings.setGeolocationDatabasePath (...). Если местоположение базы данных не установлено, постоянное хранилище будет недоступно, но Geolocation будет продолжать работать в противном случае. Чтобы установить местоположение баз данных, используйте ...

webView.getSettings().setGeolocationDatabasePath(context.getFilesDir().getPath()); 
+0

Спасибо Адарш ваше предложение работало для меня –

+0

Добро пожаловать @AbhideepDas –

Смежные вопросы