2013-08-26 60 views
7

Tôi đang viết ứng dụng đầu tiên của mình trong Phonegap và tôi đã thử nghiệm nó trên thiết bị Android. Tôi tin rằng tôi đã cấp quyền thích hợp:Phonegap Android internet không hoạt động

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

Nhưng bản đồ không hiển thị. Tôi đang cố gắng để có được một vĩ độ và kinh độ từ một dịch vụ web và sử dụng điều này để đặt một lá cờ trên một bản đồ Google. Tôi tin rằng vấn đề là thực sự với truy cập internet, như thể tôi chạy điều này thông qua Visual Studio như một trang web, dịch vụ trả về tọa độ và bản đồ được hiển thị. Tuy nhiên, khi ứng dụng được biên soạn và trang web đó được chạy bên trong webview ứng dụng, tọa độ không được trả lại và không có bản đồ nào được hiển thị.

Tôi cũng đã thêm một bảng để hiển thị tọa độ được trả lại, một lần nữa chúng được hiển thị trong trình duyệt nhưng trống trong ứng dụng đang chạy. Có ai có bất kỳ ý tưởng tại sao webview sẽ không thể kết nối với internet và trả lại dữ liệu cần thiết? Tôi đã xóa địa chỉ thực của dịch vụ web nhưng tôi biết điều đó là tốt vì nó hoạt động trong trình duyệt.

trang

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> 

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> 
+1

do u cho phép truy cập nguồn gốc * trên config.xml –

+0

Điều đó đã làm điều đó, cảm ơn. Vì bạn là người đầu tiên nếu bạn thêm nó làm câu trả lời, tôi sẽ đánh dấu nó là chính xác. Cảm ơn. – collusionbdbh

Trả lời

8

Hãy thử điều này trên config.xml :

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

Plaform -> ios -> config.xml

Plaform -> WP7 -> config.xml

Plaform -> WP8 - > config.xml

<access origin="*" /> 
+0

tôi đã tự sát vì không nhận dữ liệu từ internet và tôi không thể nhận được giải pháp trong 1 tháng !!!! cảm ơn rất nhiều!!! – rafi

3

Hãy chắc chắn rằng bạn đã thiết lập sau đây trong res/xml/config.xml:

<access origin="*" /> 
+0

tôi đã tự sát vì không nhận dữ liệu từ internet và tôi không thể nhận được giải pháp trong 1 tháng !!!! cảm ơn rất nhiều!!! – rafi

+0

Tôi không có thư mục có tên 'xml' bên trong' www/res'. Tôi có một 'config.xml' bên trong thư mục www. Tôi có nên thêm nó ở đó ..? nếu có thì theo những gì ..? – shashwat

6

Tôi gặp sự cố tương tự và phải thêm thông tin sau vào 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> 
+0

Bạn có thể giải thích tại sao điều này sẽ giúp thông đồng với vấn đề của họ? –

+4

Dự án New Cordova Android thiết lập plugin danh sách trắng theo mặc định. Khi bạn nâng cấp lên phiên bản phonegap mới (và phiên bản mới của cordova), tệp config.xml của bạn vẫn bị ảnh hưởng nhưng plugin cordova-plugin-whitelist được thêm vào plugin của bạn và từ chối truy cập internet vì bạn không có thiết lập whiltelist. –

+0

Giải quyết vấn đề của tôi! Cảm ơn. Tôi đã tìm kiếm ở khắp mọi nơi giải pháp thay vì chỉ thêm