/ / Geo Местоположението не е достъпно от уеб страница на Android при използване на браузър, вграден в приложение - javascript, android, delphi, геолокация, twebbrowser

Geo Местоположението не е достъпно от уеб страница на Android при използване на браузър, вграден в приложение - javascript, android, delphi, геолокация, twebbrowser

Използвам navigator.geolocation.getCurrentPosition() за да получите текущото местоположение на потребителя. Функцията за местоположение на тези уеб страници работи добре, когато се зарежда директно в уеб браузър на iOS и Android. Потребителят получава въпрос дали позволява достъп до местоположение и отива оттам. Не е важно кой уеб браузър или операционна система - всички те работят добре.

Ако обаче една и съща уеб страница е заредена в уеб браузър вграден в приложение който работи в Android (компонент TWebBrowser в този случай), услугата за местоположението не работи. Обаждане до navigator.geolocation.getCurrentPosition() резултати в permission_denied съобщение за грешка. Потребителят дори не е попитан дали ще позволи достъп до местоположението; това просто повдига грешка permission_denied.

Някои от очевидните неща, които проверих:

  • Кодът се предхожда if (navigator.geolocation) { така че аз знам това възможностите за геолокация са налице.
  • Приложението е изградено и внедрено с разрешения за услуги за местоположението, което работи добре, когато приложението осъществява достъп до услугите за местоположения на други места в кода (извън браузъра, това е).
  • Отхвърленото разрешение се случва само в уеб страница, когато се зарежда в уеб браузъра, вграден в приложението.
  • Това се случва само на Android. iOS работи добре.
  • Уеб браузърът, вграден в приложението, извиквароден уеб браузър на устройството. Това означава, че използваният уеб браузър не е специален персонализиран. Приложението е изградено с помощта на Delphi Firemonkey и използва компонента TWebBrowser.

Опитах го на няколко устройства с Androidразлични версии на Android до края на последната v6 и всички те се държат еднакви. Това ме кара да мисля, че се захващам с някои "OS" функции на операционната система Android. Има ли някакъв начин около това, тъй като функционалността на моите приложения зависи и от достъпа до услуги за местоположение от уеб страницата.

Като алтернатива, преминавам текущото местонахождение към уеб страницата в параметри, когато я извиквам от приложението. Но не мога да използвам WatchLocation, за да актуализирам позицията на картата, когато потребителят се движи.

Отговори:

3 за отговор № 1

можете да използвате този код, за да проверите първо разрешенията

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
//    ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
//   public void onRequestPermissionsResult(int requestCode, String[] permissions,
//                                          int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}