6

獲得當前位置我跟着這個教程:http://android-er.blogspot.com/2013/03/embed-google-map-in-webview.html嵌入谷歌地圖無法在WebView中

我想只使用谷歌地圖在WebView中,但它不能讓我的當前位置。我在WebView上啓用了JavaScript。還有什麼我必須啓用?

有誰知道爲什麼會這樣?它不應該提示我使用我目前的位置嗎?

請注意,我沒有興趣使用MapView作爲替代方法。我想知道我需要在WebView上設置什麼或者設備的位置服務?

+0

認真嗎?沒有人遇到過這個問題? – user5243421 2013-05-13 18:38:23

+0

嗨達倫我遇到了同樣的問題,@庫馬特的解決方案已修復它。你應該嘗試相同的解決方案,如果它的工作,接受它作爲答案。 – MediumOne 2013-08-06 06:23:41

回答

2

你應該允許Web視圖通過重寫方法onGeolocationPermissionsShowPrompt這樣來訪問您的位置:

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

,並添加onLocationChanged(Location loc)方法裏面它有你loc產生的經度和緯度(String long = loc.getLongitude(); String lat = loc.getLatitude();

現在使用long, lat來生成您的mapPath串並繼續產生WebView

您可以使用此爲參考:http://www.rdcworld-android.blogspot.in/2012/01/get-current-location-coordinates-city.html

+0

我不認爲我說得很清楚,但我提供的鏈接預計可以開箱即用。對於我的具體問題,我創建了一個使用JavaScript Google Maps API的移動網站,因此我無法控制原生WebView。 – user5243421 2013-05-20 06:35:16

1

在API 5.x和下面,你將需要

<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; 
    } 
} 
在您的活動