غير قادر على الحصول على إحداثيات GPS باستخدام جافاسكريبت على المتصفح في نظام أندرويد


أنا جديد جدًا في برمجة أندرويد وجافا وجافاسكريبت.

أحاول الحصول على إحداثيات GPS الحالية وتتبعها بعد ذلك على جهاز أندرويد. أنا أستخدم WebView ومعظم الكود مكتوب بلغة جافاسكريبت.

لقد بحثت كثيراً لعدة أيام وجربت العديد من الطرق المختلفة لكني غير قادر على الحصول على إحداثيات GPS على جهاز الأندرويد. يرجى إلقاء نظرة على الكود ومساعدتي في معرفة سبب عدم حصولي على موقع GPS.

بعض الأمور التي يجب الإشارة إليها هي - 1. قمت بتحميل وفحص تطبيقات استشعار أخرى ويمكنني رؤية الإحداثيات الحالية لـ GPS معروضة (لذا فإن GPS يعمل على الجهاز). 2. عند تشغيل شيفرتي البرمجية، أرى أيقونة البحث عن GPS في منطقة الإشعارات، تظل تومض لكنها لا تثبت الموقع أبدًا. 3. عند تشغيل ملف HTML فقط مع جافاسكريبت على متصفح الكمبيوتر المحمول، يطلب الإذن لمشاركة الموقع ثم يعطي الإحداثيات، ومع ذلك لا يعرض نفس الملف أي شيء على الأندرويد.

يرجى إلقاء نظرة على الكود أدناه ومساعدتي في فهم هذا. لقد جربت كثيرًا وأنشر هذا كآخر أمل لي.

ملف البيان يحتوي على الأذونات التالية -

<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" />

الكود الجافا الرئيسي في أندرويد يحتوي على -

@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);
}

ملف HTML مع الجافا سكريبت هو -

<!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>

شكراً جزيلاً مقدمًا، axs

الإجابة رقم 1

حسنًا، لقد قمت بمزيد من البحث ووجدت حلاً. أنا أنشر هذه الروابط هنا كإجابة على سؤالي لأي شخص يصل إلى هنا بحثًا عن إجابات.

كان عليّ إضافة هذه الأسطر في كود الجافا الخاص بي قبل تحميل الرابط ثم تمكنت من رؤية الإحداثيات الجغرافية.

    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);
         }
        });

لمزيد من المعلومات، اتبع هذين الرابطين -

  • موقع جغرافي في ويب فيو أندرويد
  • أندرويد: استخدام HTML5 لتحديد الموقع الجغرافي في WebView باستخدام واجهة برمجة تطبيقات JavaScript

الإجابة رقم 2

على هاتف أندرويد 6.0 (لست متأكدًا من الإصدارات الأخرى)، كان هذا يسبب لي مشاكل في ملف build.gradle الخاص بي:

targetSdkVersion: 23

تقليص ذلك إلى

targetSdkVersion 21

ثبتت مشكلتي.