2011-01-19 55 views
0

好吧,我知道如何將文件發送到服務器...我所尋找的是代碼看起來在SD卡上的文件夾中,然後把在那裏的所有文本文件,然後刪除他們..但它需要繼續在那裏看,直到有互聯網連接,以便它完成工作,否則它每隔30秒一直在那裏看.. ..?希望我正確的Android調度的文件服務器

回答

0

解釋對我來說,你應該建立一個service這確實這些操作。

public class UploadService extends Service { 

    private WakeLock cpuLock; 
    private WifiLock wifiLock; 
    private UploadFilesTask task; 

    @Override 
    public IBinder onBind(Intent i) {  
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate();  
     final PowerManager powerMgr = (PowerManager)getSystemService(Context.POWER_SERVICE); 
     cpuLock = powerMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my_lock"); 
     cpuLock.acquire();  
     final WifiManager wifiMgr = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
     wifiLock = wifiMgr.createWifiLock(WifiManager.WIFI_MODE_FULL, "my_lock"); 
     wifiLock.acquire();  
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     if (intent.hasExtra("start") && taskIsNotRunning()) { 
      task = new UploadFilesTask(); 
      task.execute(null); 
      return; 
     } 
    } 

    private boolean taskIsNotRunning() { 
     return task == null || task.getStatus() != AsyncTask.Status.RUNNING || task.isCancelled(); 
    } 

    @Override 
    public void onDestroy() {  
     super.onDestroy(); 
     cpuLock.release(); 
     wifiLock.release(); 
    } 

    private class UploadFilesTask extends AsyncTask<Object, Object, Object> { 

     private String dirName; 

     public UploadFilesTask(String directoryName) { 
      dirName = directoryName; 
     }  

     @Override 
     protected Object doInBackground(Object... arg0) {    
      final File uploadDirectory = new File(Environment.getExternalStorageDirectory(), dirName); 
      final File filesToUpload[] = uploadDirectory.listFiles(new FileFilter() { 
       public boolean accept(File f) { 
        return f.getName().toLowerCase().endsWith(".txt"); 
       } 
      }); 
      for (File f : filesToUpload) { 
          try { 
       // invoke your method for upload 
          f.delete(); 
          } catch (Exception e) {}; 
      } 
      return null;    
     } 

     @Override 
     protected void onPostExecute(Object result) {  
      super.onPostExecute(result); 
      stopSelf(); 
     } 
    } 

} 

不要忘記把服務宣言到AndroidManifest.xml文件。

可以啓動與您的活動「啓動完成」的意圖,或直接服務。

但是它需要保持在尋找 那裏,直到有互聯網連接 ,使其完成了 工作,否則它一直在尋找 有每30秒..?希望我 正確解釋

嘗試啓動服務時,wifi/3G互聯網連接出現。您的服務可以通過this intent觸發(您必須在AndroidManifest.xml文件中添加intent-filter)。

讓我把一些建議有關後臺操作:

  • 添加一些規則,以減少服務運行的速度。在其他情況下,你的電池會很快耗盡。另請考慮AlarmManager

  • 檢查電池電平上傳(BatteryManager)之前。

  • 檢查,如果你是在漫遊模式,如果用戶是罰款與(SystemSettings)。

+0

哇這是複雜的大聲笑...作爲一個初學者我甚至不確定如何打電話給這項服務?和我如何得到它讓每一個30秒 – Beginner 2011-01-19 10:47:02