Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Phonegap Android internet not working

I am writing my first app in Phonegap and I have been testing it on an Android device. I believe I have granted the appropriate permission:

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

But the map is not showing up. I am trying to get a latitude and longitude from a web service and use this to put a flag on a Google map. I believe the issue is actually with the internet access, as if I run this through Visual Studio as a website, the service returns the coordinates and the map is displayed. However, when the app is compiled and that website is run inside the app webview the coordinates are not returned and no map is displayed.

I also added a table to show the returned coordinates, again they are displayed in a browser but are blank in the running app. Does anyone have any idea why the webview wouldn't be able to connect to the internet and return the required data? I have removed the actual address of the web service but I know that is fine as it works in a browser.

HTML page:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title></title>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=true"></script>
    <link rel="stylesheet" type="text/css" href="css/index.css" />
  </head>
  <body>
    <div class="app2">
      <div id="map" style="width: 200px; height: 150px"></div>
      <script type="text/javascript">
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "http://www.xxxxxxxx.com/mobile/iphone/xml/postal.asp?postal=33173", false);
        xmlhttp.send();
        xmlDoc = xmlhttp.responseXML;
        var myOptions = {
          zoom: 10,
          mapTypeId: google.maps.MapTypeId.ROADMAP,
        };
        var map = new google.maps.Map(document.getElementById("map"), myOptions);
        var lat = x[i].getElementsByTagName("latitude")[0].childNodes[0].nodeValue;
        var long = x[i].getElementsByTagName("longitude")[0].childNodes[0].nodeValue;
        var pos = new google.maps.LatLng(lat, long);
        var infowindow = new google.maps.InfoWindow({
          map: map,
          position: pos,
          content: "Postcode 33173(Lat:" + lat + ", Long:" + long + ")"
        });
        map.setCenter(pos);
      </script>
      <script>
        document.write("<table border='1'>");
        document.write("<tr><td>Postcode</td><td>latitude</td><td>longitude</td></tr>");
        var x = xmlDoc.getElementsByTagName("position");
        for (i = 0; i < x.length; i++) {
          document.write("<tr><td>33173</td><td>");
          document.write(x[i].getElementsByTagName("latitude")[0].childNodes[0].nodeValue);
          document.write("</td><td>");
          document.write(x[i].getElementsByTagName("longitude")[0].childNodes[0].nodeValue);
          document.write("</td></tr>");
        }
        document.write("</table>");
      </script>
    </div>
  </body>
</html>

Manifest:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="1.0.0" android:windowSoftInputMode="adjustPan" package="dig.phonegap.loa_app" xmlns:android="http://schemas.android.com/apk/res/android">
  <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.VIBRATE" />
  <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.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.RECEIVE_SMS" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  <uses-permission android:name="android.permission.READ_CONTACTS" />
  <uses-permission android:name="android.permission.WRITE_CONTACTS" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.BROADCAST_STICKY" />
  <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="18" />
  <application android:allowBackup="false"
    android:hardwareAccelerated="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name">
  <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name"
    android:name="HelloWorld"
    android:theme="@android:style/Theme.Black.NoTitleBar">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
</application>
</manifest>
like image 394
collusionbdbh Avatar asked Aug 26 '13 15:08

collusionbdbh


3 Answers

Try this on config.xml:

Plaform -> android -> res -> xml -> config.xml

Plaform -> ios -> config.xml

Plaform -> wp7 -> config.xml

Plaform -> wp8 -> config.xml

<access origin="*" />
like image 115
Amit Prajapati Avatar answered Sep 18 '22 12:09

Amit Prajapati


I had the same problem, and had to add the following to config.xml.

<access origin="*" />
<plugin name="cordova-plugin-whitelist" version="1" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
    <allow-intent href="market:*" />
</platform>
<platform name="ios">
    <allow-intent href="itms:*" />
    <allow-intent href="itms-apps:*" />
</platform>
like image 21
Moritz Hahn Avatar answered Sep 18 '22 12:09

Moritz Hahn


Make sure you have the following set in res/xml/config.xml:

    <access origin="*" />
like image 39
Dawson Loudon Avatar answered Sep 22 '22 12:09

Dawson Loudon