但是安裝到紅米實機上測試時,卻出現下列的錯誤:
Android java.net.SocketException: socket failed: EACCES (Permission denied)
雖然訊息說的很明確是權限的問題,但是為什麼Genymotion模擬器(Android 4.4)上測試正常,但是實機卻是失敗的。
原本我的程式全寫在index.html,改以Phonegap的Hello The World的範例結構,重新改寫一次如下:
index.html
=================================================================
...略
<script type="text/javascript" src="js/test.js"></script>
<script type="text/javascript">
app.initialize();
</script>
test.js
=================================================================
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
receivedEvent: function(id) {
alert("aaaaaa");
//離開程式
$("#a_exit").click(function(){
if (navigator.app) {
navigator.app.exitApp();
} else if (navigator.device) {
navigator.device.exitApp();
}
});
$("#a_reg").click(function() {
try {
//設定參數
var pushConfig = {
pushServerURL: "https://aerogear-XXXXX.rhcloud.com/ag-push",
senderID: "12345678",
variantID: "8133-160f5f6fd3",
variantSecret: "956a-65441bf7"
};
push.register(onNotification, successHandler, errorHandler, pushConfig);
} catch(e) {
alert(e);
}
});
//取消註冊
$("#a_unreg").click(function() {
try {
push.unregister(un_successHandler,un_errorHandler);
} catch(e) {
alert(e);
}
});
function onNotification() {
alert("收到");
}
function successHandler() {
alert("註冊成功");
}
function errorHandler() {
alert("註冊失敗");
}
function un_successHandler() {
alert("取消註冊成功");
}
function un_errorHandler() {
alert("取消註冊失敗");
}
} // receiveEvent: function(id)
}; // app
寫完之後重新編輯再試一次,這次雖然也是失敗,但是卻出現了紅米不允許這支APP透過行動網路(3G)的視窗,
原來是紅米的問題,因為有設定不允許APP透過行動網路(3G)出去的緣故,設定允許我自己的APP通過就正常了。
就算把程式還原成之前全寫在index.html內,也變得正常了,只是為什麼改寫了程式就會有不同的訊息,
init的用意是什麼,我也不太清楚,總之問題是暫時解決了。其他的問題等有時間再好好研究一番。