6

私はandroid、java、javascriptのコーディングに非常に慣れていません。

現在のGPS座標を取得し、その後Androidデバイスで追跡しようとしています。私はwebviewを使用しており、コードの大部分はjavascriptで記述されています。

私は数日間たくさん検索し、さまざまな方法を試しましたが、AndroidデバイスでGPS座標を取得できません。コードを見て、GPS位置情報が取得されない理由を確認してください。

ポイントするいくつかのことは次のとおりです。-1。他のセンサーアプリをダウンロードして確認し、現在のGPS座標が表示されていることを確認できます(GPSがデバイスで機能しているため)。2.コードを実行すると、通知領域にGPS検索アイコンが表示されます。点滅し続けますが、修正されません。3.ラップトップブラウザでjavascriptを使用してHTMLファイルのみを実行すると、場所を共有する許可を求められ、座標が提供されますが、同じファイルはAndroidでは何も表示されません。

以下のコードを見て、私がこれを理解するのを手伝ってください。私はたくさんのことを試みました、そして私の最後の希望としてこれを投稿しています。

マニフェストファイルには次の権限があります-

<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のメインJavaコードには-

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

そして、javascriptを含む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>

よろしくお願いします、斧

4

2 に答える 2

7

さて、私はさらに検索を行い、解決策を見つけました。ここまで答えを探しに来る人のための私の質問への答えとして、これらのリンクをここに投稿しています。

URLをロードする前にJavaコードにこれらの行を追加する必要があり、それから地理座標を確認することができました。

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

詳細については、次の2つのリンクをたどってください-

于 2012-07-02T17:36:27.493 に答える
-1

build.gradleAndroid 6.0電話(他のバージョンについてはわかりません)では、これは私のファイルで私のためにそれを殺していました:

targetSdkVersion: 23

それをに減らす

targetSdkVersion 21

私の問題を修正しました。

于 2016-04-01T16:24:19.217 に答える