2013-04-05 114 views
1

我有一个带有WatchPosition调用的网页,可以在常规浏览器中正常工作。但是,请求GPS权限的对话框从不显示何时从具有WebChromeClient的WebView加载网页,并且从不调用onGeolocationPermissionsShowPrompt。Android WebChromeClient WebView onGeolocationPermissionsShowPrompt从未触发

public class GeoWebChromeClient extends WebChromeClient { 
    public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) { 
     Log.d("geolocation permission", "permission >>>"+origin); 
     callback.invoke(origin, true, false); 
    } 
} 

public class GeoWebViewClient extends WebViewClient { 

    @Override 
    public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { 
     handler.proceed(); 
    } 

    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // When user clicks a hyperlink, load in the existing WebView 
     view.loadUrl(url); 
     return true; 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    WebView Browser = (WebView) findViewById(R.id.Browser); 

    WebSettings webSettings = Browser.getSettings(); 

    webSettings.setJavaScriptEnabled(true); 
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
    webSettings.setAppCacheEnabled(true); 
    webSettings.setDomStorageEnabled(true); 
    webSettings.setGeolocationEnabled(true); 

    Browser.setWebViewClient(new GeoWebViewClient()); 
    Browser.setWebChromeClient(new GeoWebChromeClient()); 

    Browser.loadUrl("http://192.168.1.102/"); 


} 

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<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" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
+0

'onGeolocationPermissionsShowPrompt'只所示,当应用程序是第一run.use'亚行卸载your_pack_name'删除然后安装它。 – Ninja 2016-02-17 06:27:41

回答

5

onGeolocationShowPrompt实际上并没有显示提示符本身,它只是在页面请求的地理位置被调用的方法。你需要创建自己的提示如下图所示(放在onGeolocatioonShowPrompt方法内)用户:

final boolean remember = true; 
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Locations"); 
builder.setMessage(origin + " Would like to use your Current Location").setCancelable(true).setPositiveButton("Allow", 
          new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, 
             int id) { 
            // origin, allow, remember 
            callback.invoke(origin, true, remember); 
           } 
          }) 
        .setNegativeButton("Don't Allow", 
          new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, 
             int id) { 
            // origin, allow, remember 
            callback.invoke(origin, false, remember); 
           } 
          }); 
AlertDialog alert = builder.create(); 
alert.show(); 
相关问题