Android计划文件到服务器

Android计划文件到服务器,android,Android,好的,我知道如何将文件发送到服务器…我要查找的是在sd卡上的文件夹中查找的代码,然后将所有文本文件发送到其中,然后将其删除..但是它需要一直在那里查找,直到有internet连接,以便完成任务,否则它会每30秒继续查找。。?希望我的解释正确您应该构建一个执行这些操作的 public class UploadService extends Service { private WakeLock cpuLock; private WifiLock wifiLock; priv

好的,我知道如何将文件发送到服务器…我要查找的是在sd卡上的文件夹中查找的代码,然后将所有文本文件发送到其中,然后将其删除..但是它需要一直在那里查找,直到有internet连接,以便完成任务,否则它会每30秒继续查找。。?希望我的解释正确

您应该构建一个执行这些操作的

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互联网连接时,尝试启动该服务。您的服务可能由意图触发,您必须在AndroidManifest.xml文件中添加意图过滤器

让我就后台操作提出一些建议:

添加一些规则以降低服务运行率。在其他情况下,你的电池会很快耗尽。也可以考虑.

上传前检查电池电量

检查您是否处于漫游模式,以及用户对此是否满意


哇,这太复杂了,哈哈……作为一个初学者,我甚至不知道该怎么称呼这项服务?我如何让它每30秒查看一次?我是否需要在清单文件中声明PowerManager和wifi?我如何让它每30秒查看一次->不要这样做,它会耗尽电池电量。我还需要在清单文件中声明PowerManager和wifi吗?->没有。wifi和PowerManager给了我一个问题,我会让它每1小时或30分钟检查一次