2017-08-04 13 views
1

私はこの質問が多くの時間を頼まれていることを知っていますが、私は助けを見つけることができませんでした。Android WebView geolocation

ジオロケーションを使用するウェブサイトを読み込むアプリケーションを作成しようとしています。

アプリが読み込まれると、自分の場所が表示されたGoogleマップが開きます。 Webブラウザ上でうまく動作します。私がアクセスしようとしています

リンクは次のようにhttps://pas.irsglobal.net/test/

私のコードはあります。

//MainActivity.java

package za.co.opexsolutions.www.panicapp; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.webkit.GeolocationPermissions; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
public class MainActivity extends AppCompatActivity { 
/** 
* WebViewClient subclass loads all hyperlinks in the existing WebView 
*/ 
public class GeoWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     // When user clicks a hyperlink, load in the existing WebView 
     view.loadUrl(url); 
     return true; 
    } 
} 

/** 
* WebChromeClient subclass handles UI-related calls 
* Note: think chrome as in decoration, not the Chrome browser 
*/ 
public class GeoWebChromeClient extends WebChromeClient { 
    @Override 
    public void onGeolocationPermissionsShowPrompt(String origin, 
                GeolocationPermissions.Callback callback) { 
     // Always grant permission since the app itself requires location 
     // permission and the user has therefore already granted it 
     callback.invoke(origin, true, false); 
    } 
} 



WebView wv; 
String mypage = "https://pas.irsglobal.net/test/"; 
String mypage_error = "file:///android_asset/mypage_error/index.html"; 

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


    wv = (WebView) findViewById(R.id.wv); 
    wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    wv.setWebViewClient(new GeoWebViewClient()); 
    wv.getSettings().setJavaScriptEnabled(true); 
    wv.getSettings().setGeolocationEnabled(true); 
    wv.setWebChromeClient(new GeoWebChromeClient()); 
    wv.setFocusable(true); 
    wv.setFocusableInTouchMode(true); 
    wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
    wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    wv.getSettings().setDomStorageEnabled(true); 
    wv.getSettings().setDatabaseEnabled(true); 
    wv.getSettings().setAppCacheEnabled(true); 



    wv.setWebChromeClient(new WebChromeClient() { 
     public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { 
      // callback.invoke(String origin, boolean allow, boolean remember); 
      callback.invoke(origin, true, false); 
     } 
    }); 

    wv.loadUrl(mypage); 

    wv.setWebViewClient(new WebViewClient(){ 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      wv.loadUrl(mypage_error); 
     } 
    }); 



} 

}

//Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> 
<uses-permission android:name="android.permission.LOCATION_HARDWARE"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/shipping" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/shipping" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <activity android:name=".HomeActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".MainActivity"></activity> 
</application> 

+0

ご覧ください。[?私は誤用タグを避けるためにはどうすればよいです](https://meta.stackoverflow.com/questions/354427/how-do-i-avoid-misusing-タグ) – EJoshuaS

答えて

0

OK、問題の可能性があるものを検索してから、他の人にも役立つことを願っています。 この場合の問題は自分のコードではありませんが、Androidバージョンiはエミュレータで実行されています。 (私はAndroid 7 Nougatを使用していました)。

Android 6.0(APIレベル23)以降、ユーザーはアプリの実行中ではなく、アプリの実行中ではなく、アプリケーションのインストール時にアクセス許可を与えます。

デバイスがAndroid 6.0以降を実行していて、アプリのターゲットSDKが23以上の場合:アプリはマニフェストに権限をリストする必要があり、アプリケーションの実行中に必要な権限をそれぞれ要求する必要があります。ユーザーは各権限を付与または拒否することができ、ユーザーが権限要求を拒否しても機能は制限されたままアプリケーションを実行し続けることができます。フル支援のために

Please Click Here