2016-03-24 17 views
4

Ben js üzerinden GPS lokalizasyonu alacak WebView yaratmaya çalışıyorum, ama lokalizasyonu göstermek gerekir butonuna tıkladığınızda: Android 4.1.1 (emülatör) : "Hata kodu 2. Başarısızjs ile WebView içinde konum alma

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<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_WIFI_STATE"/> 

My ayarları:

aynı, sadece hiçbir şey

Benim izinleri olur sadece başka bir şey android 6.0 (emülatörü) içinde olur android 4.1.2 (telefonda) 'de Coğrafi Konum hizmetini başlatmaya 210

WebChromeClient:

WebChromeClient webChromeClient = new WebChromeClient(){ 

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

      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){ 
       mUploadMessage = uploadMsg; 
       Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
       i.addCategory(Intent.CATEGORY_OPENABLE); 
       i.setType("*/*"); 
       MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FILECHOOSER_RESULTCODE); 

      } 

      public boolean onShowFileChooser (WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams){ 
       Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
       i.addCategory(Intent.CATEGORY_OPENABLE); 
       i.setType("*/*"); 
       MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FILECHOOSER_RESULTCODE); 
       return false; 
      } 

     }; 

WebViewClient:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0); 

ve js kodunu (benim kod):

sonunda
WebViewClient webViewClient = new WebViewClient(){ 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url){ 
       view.loadUrl(url); 
       return true; 
      } 

      public void onPageFinished(WebView view, String url){ 
       progressBar.setVisibility(View.GONE); 
       webView.setVisibility(View.VISIBLE); 
       refreshBtn.setVisibility(View.VISIBLE); 
      } 
     }; 

, ben bu kod satırını sahip

<script> 
function getLocationConstant() 
{ 
    if(navigator.geolocation) 
    { 
    navigator.geolocation.getCurrentPosition(onGeoSuccess,onGeoError); 
    } else { 
    alert("Brak obsługi GPS"); 
    } 
} 


function onGeoSuccess(event) 
{ 
    document.getElementById("skad").value = event.coords.latitude+", "+event.coords.longitude; 
document.getElementById('szk').click(); 

} 


function onGeoError(event) 
{ 
    alert("Error code " + event.code + ". " + event.message); 
} 


</script> 

<input type="text" name="skad" style="width:278px;" id="skad" > 
+0

olacağını biraz yığın izi. buraya ekle. –

+0

Ben sadece 4.1.1 var: W/EGL_emulation: eglSurfaceAttrib uygulanmadı, android 6.0 ve 4.1.2 telefon baskı yok – Qiteq

+0

Aynı sorun, özellikle kullanıcı ayarlarında konumlandırma devre dışı bıraktığınızda, ben nedenini buldunuz mu? – aznxfrost

cevap

10

Neden emin değilim, ama şimdi çalışıyor. Gps konumunu kullanan webView ile sadece app için kod var.
MainActivity:

package com.qiteq.gpswebview; 

import android.Manifest; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.webkit.GeolocationPermissions; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     WebView wv = new WebView(this); 
     wv.loadUrl("http://qiteq.pl/stack/index.html"); 
     setContentView(wv); 

     ActivityCompat.requestPermissions(this, new String[]{ 
       Manifest.permission.ACCESS_FINE_LOCATION, 
       Manifest.permission.ACCESS_COARSE_LOCATION 
     }, 0); 

     wv.getSettings().setJavaScriptEnabled(true); 


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


    } 
} 

Bildirim:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.qiteq.gpswebview"> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

Ve index.html: (bu endeks, belli bir süre için benim sunucuda http://qiteq.pl/stack/index.html olacaktır)

<script> 
function getLocationConstant() 
{ 
    if(navigator.geolocation) 
    { 
    navigator.geolocation.getCurrentPosition(onGeoSuccess,onGeoError); 
    } else { 
    alert("No GPS support"); 
    } 
} 


function onGeoSuccess(event) 
{ 
    document.getElementById("location").value = event.coords.latitude+", "+event.coords.longitude; 
    alert("Success: "+event.coords.latitude+", "+event.coords.longitude); 
} 


function onGeoError(event) 
{ 
    alert("Error code " + event.code + ". " + event.message); 
} 


</script> 

<input type="text" name="location" id="location" style="width:278px;"> 
<button onclick="getLocationConstant()" >Click</button> 
+0

YESSSSSS. Benim için önemli olan ActivityCompat.requestPermissions (...) bloğu – deebs

+0

Merhaba, işe yarar! – demenvil