2016-09-23 16 views
3

私はWebViewを持っており、ロードされたページにはGeolocationPermissionsの許可が必要です。そのために、私はonGeolocationPermissionsShowPrompt()をオーバーライドします。Android Marshmallow 6.0 webviewの実行時に許可の場所をリクエストする

また、私のアプリは、新しいアクセス許可モデルでSDK 23(Android M)をターゲットにしています。私はこのコードを使用しますが、仕事をすることはできません、ダイアログを表示することはできませんし、現在の位置を決定することができない、誰かが私を助けることができますか?

おかげ

private static final int REQUEST_INTERNET = 200; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ActionBar actionBar = getSupportActionBar(); 
    if (null != actionBar) { 
     actionBar.hide(); 
    } 
    if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
     ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_INTERNET); 
    } 

    String url = "https://google.com"; 
    WebView view = (WebView) this.findViewById(R.id.WebView); 
    view.setWebViewClient(new MyBrowser()); 
    view.getSettings().setJavaScriptEnabled(true); 
    view.getSettings().setDomStorageEnabled(true); 
    view.getSettings().setAppCacheEnabled(true); 
    view.getSettings().setDatabaseEnabled(true); 
    view.getSettings().setGeolocationEnabled(true); 
    view.getSettings().setGeolocationEnabled(true); 
    view.setWebChromeClient(new GeoWebChromeClient()); 
    view.loadUrl(url); 
} 

私は他の誰かのために多分いつか役に立つ、githubの上のアンドロイドアーセナルロケーションマネージャによってこの問題を解決した要求

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (grantResults[0]== PackageManager.PERMISSION_GRANTED){ 

    } else if(grantResults[0] == PackageManager.PERMISSION_DENIED){ 
     if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)){ 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("This permission is important to Access Location.") 
        .setTitle("Important permission required"); 

      builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_INTERNET); 
       } 
     }); 
      ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_INTERNET); 
    } else { 
     } 
    } 
} 

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

答えて

関連する問題