Android’de tarayıcıda Javascript kullanarak GPS koordinatlarını almak mümkün değil
Android, Java ve JavaScript kodlamaya çok yeniyim.
Mevcut GPS koordinatlarını almaya ve daha sonra bir Android cihazda takip etmeye çalışıyorum. Webview kullanıyorum ve kodun büyük kısmı JavaScript ile yazılmış.
Birkaç gündür çok araştırma yaptım ve birçok farklı yöntem denedim ama Android cihazda GPS koordinatlarını alamıyorum. Lütfen koda bir göz atın ve neden GPS konumunu alamadığımı anlamama yardımcı olun.
Bahsetmem gereken birkaç şey var - 1. Diğer sensör uygulamalarını indirdim ve kontrol ettim, mevcut GPS koordinatlarının gösterildiğini görebiliyorum (yani cihazda GPS çalışıyor). 2. Kendi kodumu çalıştırdığımda, bildirim alanında GPS arama simgesini görüyorum, sürekli yanıp sönüyor ama asla sabitlenmiyor. 3. Sadece HTML dosyasını ve içindeki JavaScript’i bir dizüstü bilgisayar tarayıcısında çalıştırdığımda, konumu paylaşma izni istiyor ve ardından koordinatları veriyor, ancak aynı dosya Android’de hiçbir şey göstermiyor.
Lütfen aşağıdaki koda bir göz atın ve bana bunu çözmemde yardımcı olun. Çok denedim ve bunu son umut olarak paylaşıyorum.
Manifest dosyası aşağıdaki izinlere sahiptir -
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
Android'deki ana java kodu şunlara sahiptir -
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl("file:///android_asset/mymap.html");
setContentView(webView);
}
Ve javascript ile HTML dosyası şudur -
<!DOCTYPE html>
<html>
<body onunload="OnUnload()" onload="getLocation()">
<p id="demo">Your coordinates:</p>
<script>
var watchID;
var x=document.getElementById("demo");
function getLocation()
{
if (navigator.geolocation)
{
var options = {maximumAge:600000, timeout:100000, enableHighAccuracy: true};
watchID = navigator.geolocation.watchPosition(showPosition,showError,options);
}
else{x.innerHTML="Geolocation is not supported by this browser.";}
}
function showPosition(position)
{
x.innerHTML="Latitude: " + position.coords.latitude +
"<br />Longitude: " + position.coords.longitude;
}
function showError(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED:
x.innerHTML="User denied the request for Geolocation."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML="Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML="The request to get user location timed out."
break;
case error.UNKNOWN_ERROR:
x.innerHTML="An unknown error occurred."
break;
}
}
function OnUnload()
{
alert ("The current document will be unloaded!");
navigator.geolocation.clearWatch(watchID);
}
</script>
</body>
</html>
Şimdiden çok teşekkürler, axs
Cevap #1
Daha fazla araştırma yaptım ve bir çözüm buldum. Buraya, buraya gelen ve cevap arayan herkes için soruma cevap olarak bu bağlantıları paylaşıyorum.
URL'yi yüklemeden önce bu satırları Java koduma eklemek zorunda kaldım ve sonra coğrafi koordinatları görebildim.
webView.getSettings().setGeolocationEnabled(true);
webView.setWebChromeClient(new WebChromeClient() {
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
// callback.invoke(String origin, boolean allow, boolean remember);
callback.invoke(origin, true, false);
}
});
Daha fazla bilgi için bu iki bağlantıyı takip edin -
- android webview konum servisi
- Android: Webview'de JavaScript API ile geolokasyonu belirlemek için html5 kullanma
Cevap #2
Bir Android 6.0 telefonda (diğer sürümlerden emin değilim), bu benim için build.gradle dosyamda sorun yaratıyordu:
targetSdkVersion: 23
bunu ...'a indirgemek
targetSdkVersion 21
Sorunumu çözdüm.
