2012-03-23 11 views
2

Ich habe eine jqueryMobile App, die Google Maps API verwendet und funktioniert ordnungsgemäß auf iOS. Allerdings kann ich es nicht auf Android laufen. Ich habe folgende Berechtigungen für meine Manifest-Datei festgelegt. Die Datei ist korrekt geladen, aber ich kann die Karte nicht anzeigen! Angenommen, dass jqmobile Code funktioniert, weil er auf iOS funktioniert, wie er aktiviert wird oder welche Schritte benötigt werden? Vielen Dank.android google maps auf einem webview

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
    <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> 

meine webview Klasse aussieht,

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 

     browse4 = (WebView) findViewById(R.id.webview1); 
     browse4.getSettings().setJavaScriptEnabled(true); 
     browse4.getSettings().setUseWideViewPort(true); 
     browse4.getSettings().setLoadWithOverviewMode(true); 
     browse4.getSettings().setBuiltInZoomControls(true); 
     browse4.getSettings().setSupportZoom(true); 

     browse4.loadUrl("file:///data/data/" + PACKAGE_NAME + "/files/" + "myMap.html"); 

    } 
+0

Wie erhalten Sie Ihre HTML-Datei in Ihre Dateien dir? vielleicht wird es während dieses Prozesses beschädigt? Versuchen Sie, eine einfache HTML-Seite mit nur ein wenig Text einzublenden und sehen Sie, ob das WebView Ihren HTML-Code auf diese Weise anzeigt. – FoamyGuy

+0

html hat keine Fehler. Nochmal überprüft. Auch getestet von Remote-Server mit Android und iOS und für iOS funktioniert. – Jaume

Antwort

1

ist es ein besonderer Grund, warum Sie nicht den Google MapView verwenden?

Ich verstehe, dass es jQuery verwendet, aber das könnte einfacher sein.

+0

ja gemacht, aus bestimmten Gründen muss ich ein WebView verwenden. Sollte eine einfache Aufgabe sein ... Wirklich ist es auf iOS aber Dieses Problem macht mich verrückt auf Android ... – Jaume

+0

Es ist gut, dass Sie javaScriptEnabled (true) zuerst ausgeführt haben, aber es kann etwas mit jqmobile zu tun haben.Wenn es iOS-spezifische ist, was ist das? Es könnte möglicherweise ein Fehler sein das Javascript, verursacht den Rest der Seite nicht korrekt zu initialisieren – twig

+0

was war die Lösung für das Problem? Ich muss meine mapView zentrische Android-App portieren, um ein WebView mit Google Maps zu laden, so dass ich versuchen kann, meine neu zu packen APK als Blackberry BAR. – topwik

0

könnte eine dumme Antwort sein, aber haben Sie dies in Ihrem Manifest?

<uses-library android:name="com.google.android.maps" /> 
+0

bereits hinzugefügt, um zu manifest :( – Jaume

+0

Es war einen Versuch wert, ich weiß, ich habe diesen Fehler vor – testingtester

0

Ok versuchen diese

Erstellen Sie ein neues Projekt mit Google API und versuchen dies.

package com.ab1209.webview; 

import android.app.Activity; 
import android.content.Context; 
import android.content.pm.ActivityInfo; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class WebMapActivity extends Activity implements LocationListener 
{ 
    private static final String MAP_URL = "http://gmaps-samples.googlecode.com/svn/trunk/articles-android-webmap/simple-android-map.html"; 
    private WebView webView; 

    Location mostRecentLocation; 

    @Override 
    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getLocation(); 
     setupWebView(); 
     this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

    private void getLocation() 
    { 
     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     String provider = locationManager.getBestProvider(criteria, true); 
     // In order to make sure the device is getting the location, request 
     // updates. 
     locationManager.requestLocationUpdates(provider, 1, 0, this); 
     mostRecentLocation = locationManager.getLastKnownLocation(provider); 
    } 

    @Override 
    public void onLocationChanged(Location arg0) 
    { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String provider) 
    { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) 
    { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) 
    { 
     // TODO Auto-generated method stub 

    } 

    /** Sets up the WebView object and loads the URL of the page **/ 
    private void setupWebView() 
    { 
     final String centerURL = "javascript:centerAt(" + mostRecentLocation.getLatitude() + "," + mostRecentLocation.getLongitude() + ")"; 
     webView = (WebView) findViewById(R.id.webview); 
     webView.getSettings().setJavaScriptEnabled(true); 
     // Wait for the page to load then send the location information 
     webView.setWebViewClient(new WebViewClient()); 
     webView.loadUrl(MAP_URL); 
     /** Allows JavaScript calls to access application resources **/ 
     webView.addJavascriptInterface(new JavaScriptInterface(), "android"); 
    } 

    /** 
    * Sets up the interface for getting access to Latitude and Longitude data 
    * from device 
    **/ 
    private class JavaScriptInterface 
    { 
     public double getLatitude() 
     { 
      return mostRecentLocation.getLatitude(); 
     } 

     public double getLongitude() 
     { 
      return mostRecentLocation.getLongitude(); 
     } 
    } 
} 

Bitte beachten Sie auch this überprüfen hatte .Ich das gleiche Problem jetzt ist es gelöst ist.

0

Sie können nicht auf die Datei so zugreifen. Sie müssen es in Ihren Ordner assets legen und dann mit file:///android_asset/file_name.html darauf zugreifen. Sie können auf den Ordner /data/data nur direkt zugreifen, wenn Sie über Rootzugriff verfügen.