Phonegap Android互联网不工作

7

我正在使用Phonegap编写我的第一个应用程序,并在Android设备上进行测试。我相信我已经授予了适当的权限:

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

但是地图没有显示出来。我正在尝试从网络服务获取纬度和经度,并使用这些数据在Google地图上放置一个标记。我认为问题实际上是因为无法访问互联网,因为如果我将其作为网站通过Visual Studio运行,服务会返回坐标并显示地图。但是,当应用程序被编译并且该网站在应用程序webview中运行时,坐标未返回,也没有显示地图。
我还添加了一个表格来显示返回的坐标,同样在浏览器中显示,但在运行的应用程序中为空白。有人知道为什么webview无法连接到互联网并返回所需的数据吗?我已经删除了网络服务的实际地址,但我知道它没有问题,因为它在浏览器中可以工作。
HTML页面:
<!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>

清单:

<?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>

1
你允许在config.xml上使用access-origin*吗? - Amit Prajapati
做到了,谢谢。既然你先回答的,如果你把它作为答案添加,我会将其标记为正确的。谢谢。 - collusionbdbh
3个回答

8
尝试在 config.xml 中进行以下操作:
平台 -> 安卓 -> res -> xml -> config.xml
平台 -> iOS -> config.xml
平台 -> WP7 -> config.xml
平台 -> WP8 -> config.xml
<access origin="*" />

我为了无法从互联网获取数据而苦恼了很久,整整一个月都找不到解决方法!!!非常感谢!!! - rafi

6
我遇到了同样的问题,不得不在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>

请问您能否解释一下为什么这会帮助collusionbdbh解决他们的问题? - John Odom
4
新的 Cordova Android 项目默认设置了白名单插件。当你升级到新的 PhoneGap 版本(和新的 Cordova 版本)时,你的 config.xml 文件保持不变,但 cordova-plugin-whitelist 被添加到你的插件列表中,并且因为你没有设置白名单而拒绝了互联网访问。 - fastr.de
问题解决了!谢谢。我到处寻找解决方案,而不仅仅是添加<access origin="*" />。 - Karim O.

4
请确保在res/xml/config.xml中设置了以下内容:
    <access origin="*" />

我为了无法从互联网获取数据而苦恼了很久,整整一个月都找不到解决方法!!!非常感谢!!! - rafi
我在www/res文件夹中没有名为xml的文件夹。我在www文件夹中有一个config.xml文件。我应该将它添加到那里吗?如果是,应该放在哪里? - shashwat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接