我一直在研究Android程序。該程序的一部分使用套接字連接與web服務交互,發送的文件平均大約爲320 kB。在桌面上運行的代碼大約需要1.5分鐘才能傳輸。使用我的android手機(Atrix),似乎需要大約一個小時。手機連接到無線網絡,所以我並不期待它需要這麼長時間。我最初的想法是增加一個wifi鎖,但它沒有任何幫助。使用套接字的Android文件傳輸
我有一個異步任務運行的實際上傳(對於閱讀中,我做了它的一些僞)
@Override
protected void onPreExecute()
{
//Before starting the task show the uploading dialog
uploadingDialog.show();
}
@Override
protected void onPostExecute(final Boolean success) {
//After the task close the dialog
uploadingDialog.dismiss();
}
@Override
protected Boolean doInBackground(String... params) {
//Upload the files in the background
//keep track of upload results
boolean uploaded = true;
boolean temp;
//lock wifi on and stop the program from sleeping
_keepOnStart();
//Upload each file individually
for(int i=0; i <= fileNameList.size()-1; i++){
//this method does the actual writing to the socket/converts
//the file to a byte array etc.
temp = serverConnection.uploadWord(fileNameList.get(i));
if(temp == false) {
uploaded = false;
}
}
_keepOnStop();
return uploaded;
}
private void _keepOnStart() {
if (_powerManagement == null) {
_powerManagement = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
}
if (_wakeLock == null) {
_wakeLock = _powerManagement.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE,
"0 Backup power lock");
}
_wakeLock.acquire();
WifiManager wifiManager = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
_wifiLock = wifiManager.createWifiLock("0 Backup wifi lock");
_wifiLock.acquire();
}
}
private void _keepOnStop() {
if ((_wifiLock != null) && (_wifiLock.isHeld())) {
_wifiLock.release();
}
if ((_wakeLock != null) && (_wakeLock.isHeld())) {
_wakeLock.release();
}
}
在代碼中,我只是時刻「serverConnection.uploadWord的桌面版本(fileNameList獲得(I));」與一個設定的文件名稱。 該方法本身抓取文件中的字節數據,創建一個數據包發送到服務器,然後將其發送出去。
我的一些明顯的權限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我想知道如果任何人都可以爲此提供一個交代。我的假設是設備正在使用它的數據連接,但同時在設備上只允許背景數據,並且在過去7天內我看不到任何數據。
(任何及所有的幫助深表感謝。如果我不清楚反正請讓我知道。)
你是否在狀態欄或移動網絡中看到了無線網絡圖標?如果您有權訪問服務器日誌,請檢查IP地址 - 假設您的WiFi涉及NAT,則無線網絡上的手機應顯示在服務器上,使其具有與您的無線網絡在相同時間點訪問服務器上的PC相同的IP地址。 –
在狀態欄中,我同時顯示了wifi和H +。數據庫不存儲設備的IP地址。不幸的是,由web服務寫入的日誌不起作用。 (或者沒有得到更新...)我可以訪問/ var/logs/messages,儘管這裏可能有幫助。 檢查是否有相同的IP地址是瞭解手機是否使用wifi或數據的好方法。堅實的建議。 – sherwood
查看消息日誌,我沒有看到任何內容。任何其他想法?或者我在看錯日誌? – sherwood