6

で現在位置を得ることができない私は、このチュートリアルの後:http://android-er.blogspot.com/2013/03/embed-google-map-in-webview.html組み込みGoogleマップは、WebViewの

を私はWebViewの中でGoogleマップを使用しようとしているが、それは私の現在の位置を取得することはできません。 WebViewでJavaScriptを有効にしました。他に何を有効にしなければなりませんか?

それは誰でも知っていますか?現在の場所を使用するように促すべきではありませんか?

代わりにMapViewを使用することに興味はありません。 WebViewで設定する必要があるか、デバイスのロケーションサービスで設定する必要があるかを調べようとしていますか?

+0

真剣に?誰もこの問題に遭遇していませんか? – user5243421

+0

こんにちはダレン私は同じ問題に遭遇し、@ Kumaitの解決策がそれを修正しました。あなたは同じ解決策を試してみて、それがうまくいくなら答えとしてそれを受け入れます。 – MediumOne

答えて

2

あなたは方法このようなonGeolocationPermissionsShowPromptオーバーライドすることで、あなたの場所にアクセスするためのWeb表示を許可する必要があります。以下のAPI 5.xの上

webView.setWebChromeClient(new WebChromeClient(){ 

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

あなたは、android.permission.ACCESS_FINE_LOCATIONandroid.permission.INTERNETを有効にする必要があるだろう

LocationManagerインスタンスを作成し、LocationListenerインスタンス

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
LocationListener locationListener = new MyLocationListener(); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener); 

をし、その中にあなたのlocは、緯度と経度を生成していonLocationChanged(Location loc)メソッドを追加します(String long = loc.getLongitude(); String lat = loc.getLatitude();

long, latを使用してを生成してください文字列はWebView

あなたは参照のためにこれを使用することができます発生し続けると:http://www.rdcworld-android.blogspot.in/2012/01/get-current-location-coordinates-city.html

+0

私はこれを明確にしたとは思えませんが、私が提供したリンクはすぐに使えると期待されています。具体的な問題については、JavaScriptのGoogle Maps APIを使用するモバイルウェブサイトを作成しているため、ネイティブのWebViewを制御することはできません。 – user5243421

1

をして、あなたが必要となります

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

AndroidManifest.xml

ただし、API 6.0+でジオロケーションの許可を許可するには、request the permission at runtimeが必要です。

Request location permission

、これを行う

private String mGeolocationOrigin; 
private GeolocationPermissions.Callback mGeolocationCallback; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // other setup 

    myWebView.setWebChromeClient(new MyWebChromeClient()); 
} 

private WebChromeClient mWebChromeClient = new WebChromeClient() { 
    @Override 
    public void onGeolocationPermissionsShowPrompt(String origin, 
                GeolocationPermissions.Callback callback) { 
     // Geolocation permissions coming from this app's Manifest will only be valid for devices with API_VERSION < 23. 
     // On API 23 and above, we must check for permission, and possibly ask for it. 
     final String permission = Manifest.permission.ACCESS_FINE_LOCATION; 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || 
       ContextCompat.checkSelfPermission(MainActivity.this, permission) == PackageManager.PERMISSION_GRANTED) { 
      // we're on SDK < 23 OR user has already granted permission 
      callback.invoke(origin, true, false); 
     } else { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission)) { 
       // user has denied this permission before and selected [/] DON'T ASK ME AGAIN 
       // TODO Best Practice: show an AlertDialog explaining why the user could allow this permission, then ask again 
      } else { 
       // ask the user for permissions 
       ActivityCompat.requestPermissions(MainActivity.this, new String[] {permission}, RP_ACCESS_LOCATION); 
       mGeolocationOrigin = origin; 
       mGeolocationCallback = callback; 
      } 
     } 
    } 
} 

を使用し、その結果受信するには:あなたの活動の

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case RP_ACCESS_LOCATION: 
      boolean allow = false; 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // user has allowed these permissions 
       allow = true; 
      } 
      if (mGeolocationCallback != null) { 
       mGeolocationCallback.invoke(mGeolocationOrigin, allow, false); 
      } 
      break; 
    } 
} 

を。

関連する問題