Java Android:如何在应用程序进行其他工作时连续保存传感器数据

Java Android:如何在应用程序进行其他工作时连续保存传感器数据,java,android,eclipse,android-intent,android-service,Java,Android,Eclipse,Android Intent,Android Service,我是android新手。我正在开发一个应用程序来持续保存传感器的数据,并在旁边拍照。事实上,我想在拍摄照片时,或者在屏幕关闭时,开始将加速度计数据保存到文件中。 我已经到了这个地步,我的应用程序在我按下按钮时保存传感器数据,但它只保存了一次。 我怎样才能连续保存数据而不影响应用程序的其他部分运行? 我希望它能在我在应用程序中拍照时、屏幕变黑时以及我退出应用程序时保存数据(例如,应用程序暂停) plz-hlp-thnx 这是我的密码 private OnClickListener saveFun

我是android新手。我正在开发一个应用程序来持续保存传感器的数据,并在旁边拍照。事实上,我想在拍摄照片时,或者在屏幕关闭时,开始将加速度计数据保存到文件中。 我已经到了这个地步,我的应用程序在我按下按钮时保存传感器数据,但它只保存了一次。 我怎样才能连续保存数据而不影响应用程序的其他部分运行? 我希望它能在我在应用程序中拍照时、屏幕变黑时以及我退出应用程序时保存数据(例如,应用程序暂停)

plz-hlp-thnx

这是我的密码

private OnClickListener saveFun =new OnClickListener(){

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        try { 
               File root = Environment.getExternalStorageDirectory(); 
               if (root.canWrite()){ 
                   File f = new File(root, "test.txt"); 
                   FileWriter fw;
                   if ( saveBtnCnt == 0){
                       fw = new FileWriter(f);
                       saveBtnCnt = 1;

                   }
                   else{
                       fw = new FileWriter(f,true); 
                   }
                   BufferedWriter out = new BufferedWriter(fw); 

                   c = Calendar.getInstance();
                   miliseconds = c.get(Calendar.MILLISECOND);
                   seconds = c.get(Calendar.SECOND);
                   minutes = c.get(Calendar.MINUTE);
                   hour = c.get(Calendar.HOUR);
                   day = c.get(Calendar.DAY_OF_MONTH);
                   month = c.get(Calendar.MONTH)+1;
                   year = c.get(Calendar.YEAR);

                   out.write(year+"/"+month+"/"+day
                           +"\n"+hour+":"+minutes+":"+seconds+"."+miliseconds+"\n");
                   out.write(currentX.getText()+"\n");
                   out.write(currentY.getText()+"\n");
                   out.write(currentZ.getText()+"\n");
                   out.close(); 

                   Toast.makeText(getBaseContext(), "File saved successfully!",
                Toast.LENGTH_SHORT).show();
               } 
           } catch (IOException e) { 
           }
    }
};
1) 创建一个服务

2) 让服务侦听传感器事件

3) 在服务中,创建一个线程

4) 在线程中,创建一个消息循环

5) 当您获得传感器事件时,将它们发送到线程的消息循环

6) 让线程等待传入事件。当它看到一个时,将其附加到文件中


7) 当服务停止时,取消线程。当线程被取消时,让它关闭文件。

旁白:你应该真正了解如何使用
SimpleDateFormat
而不是使用
year+“/”+month+“/”+day+“\n”+hour+“:“+minutes+”:“+seconds+”+milisonds+“\n”
。嗨,我有一个类似的应用程序:一个监听加速度传感器的服务,在每次更改时,我都会将数据保存到1024字节的缓冲区中,当数据已满时,将其附加到文件中,但我不使用线程。为什么有必要?一切似乎都很好,而不是电池消耗-任何变化,这是有关丢失的线程?TNX!!发布线程允许您将文件io从ui线程中卸载,并且响应速度更快。这不是完全必要的,但可能是个好主意,这取决于你做了多少工作。