0

Web ビューを使用する Android アプリがあります。getCurrentPosition を使用してユーザーを特定する JS を除いて、Web ビューは適切に機能します。この問題について読み、適切なアクセス許可が必要であること、および を設定する必要があることを理解しましたsetJavaScriptEnabled(true);。これらのことを実行しましたが、Android アプリでまだ多くの問題が発生しています。ユーザーの位置情報を取得する許可を求めるプロンプトが表示されないこともあります。誰でもこれを修正するのを手伝ってもらえますか? 関連する Java ファイル、manifest.xml からのアクセス許可、およびユーザーの場所を取得する JS を含めました。どんな助けでも素晴らしいでしょう!


これが私のJavaファイルです:

package com.website.appname;

import android.app.Activity;
//OTHER IMPORTS HERE

class MyClient extends WebChromeClient {

    @Override
    public void onGeolocationPermissionsShowPrompt(String origin,
            Callback callback) {
        callback.invoke(origin, true, false);
    }
}

public class locationPage extends Activity {
    WebView webView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.embed);
        webView = (WebView) findViewById(R.id.webview);
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.requestFocus(View.FOCUS_DOWN);
        webView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                return false;
            }
        });

        webView.loadUrl("http://www.website/page.php");
        webView.setWebChromeClient(new MyClient());
        @SuppressWarnings("unused")
        class HelloWebViewClient extends WebViewClient { 
            @Override 
            public boolean shouldOverrideUrlLoading(WebView view, String url) { 
                view.loadUrl(url); 
                return true; 
            } 
    }
}
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
            webView.goBack(); 
            return true; 
        } 
        return super.onKeyDown(keyCode, event); 
}
}

私のマニフェストの権限は次のとおりです。

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

Web ビューによって読み込まれる Web ページは次のとおりです。

<script>

      if( navigator.geolocation ) {
           // Call getCurrentPosition with success and failure callbacks
           navigator.geolocation.getCurrentPosition( success, fail );
      }
      else {
           alert("Sorry, your browser does not support geolocation services.");
      }

      function success(position) {
          // GeoPosition Object
          window.location = "another_page.php?user_lat=" + position.coords.latitude 
          + "&user_lon=" + position.coords.longitude + "&accuracy=" + 
          position.coords.accuracy;
      }
      function fail() {
           // Could not obtain location
      }


 </script>

<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>

PS android webview geolocationなども調べてみましたが、これは役に立ちましたが、問題は解決しません。ありがとうございました!

4

1 に答える 1

1

位置情報が生成される前に位置情報がタイムアウトしているようです。タイムアウト期間を設定して、デフォルトのタイムアウト期間を遅らせてみてください。

navigator.geolocation.getCurrentPosition(success,
                                         fail,
                                         {timeout:60000});
于 2013-08-13T11:35:06.813 に答える