【问题标题】:Android: how to save sensor data continuously while app is doing other worksAndroid:如何在应用程序执行其他工作时连续保存传感器数据
【发布时间】:2016-05-02 10:02:45
【问题描述】:

我是安卓新手。我正在开发一个应用程序来持续保存传感器的数据并拍照。事实上,我想开始将加速度计数据保存到文件中拍照,或者屏幕变黑。 我已经达到这一点,我的应用程序会在我触摸按钮时保存传感器数据,但它只执行一次。 我怎样才能让它连续保存数据而不影响我的应用程序的其他部分运行? 我希望它在我在我的应用中拍照时保存数据,当屏幕变黑时,当我不在我的应用程序中时(例如应用程序暂停)

请多多关照。

这是我的代码

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) { 
           }
    }
};

【问题讨论】:

  • 旁白:您应该真正了解如何使用SimpleDateFormat 而不是使用year+"/"+month+"/"+day+"\n"+hour+":"+minutes+":"+seconds+"."+miliseconds+"\n"

标签: java android eclipse android-intent android-service


【解决方案1】:

1) 创建服务。

2)让服务监听传感器事件。

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

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

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

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

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

【讨论】:

  • 嗨,我有一个类似的应用程序:一个侦听加速度计传感器的服务,在每个 onChange 上我将数据保存到 1024 字节缓冲区,当它已满时将其附加到文件中,但我没有t 使用线程。为什么有必要?一切似乎都工作正常而不是电池消耗 - 这是否与缺少线程有关? TNX!!
  • 发布线程可以让您从 ui 线程中卸载文件 io 并提高响应速度。这不是完全必要的,但可能是一个好主意,具体取决于您正在做的工作量。
猜你喜欢
  • 2020-03-24
  • 2021-01-31
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
相关资源
最近更新 更多