【问题标题】:Writing sensor values into a file将传感器值写入文件
【发布时间】:2017-06-10 20:58:19
【问题描述】:

我试图让代码将 TotalAccelerate 的所有结果写入 .txt 文件。该代码编写了近 25 到 26 个样本,然后自行停止。ToggleButton 代码无法正常工作,我假设 for 循环会生成这些样本的问题。它应该比 25 或 26 更多样本。它应该写入所有值,以便我可以将它们用于离线目的,直到我关闭 (!OnStore.isChecked())。感谢您的合作。

  private GestureDetectorCompat mDetector;
FileOutputStream fileOutputStream;

double TotalAccelerate;
ArrayList<Double> list;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list = new ArrayList<Double>();

//for Accelermeter
    sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensorText = (TextView) findViewById(R.id.sensor);
    accelermeter = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sm.registerListener(this, accelermeter, SensorManager.SENSOR_DELAY_NORMAL);
    mDetector = new GestureDetectorCompat(this, new MyGestureListener());


    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        File Root = Environment.getExternalStorageDirectory();
        File dir = new File(Root.getAbsolutePath() + "/MyApp");
        if (!dir.exists()) {
            dir.mkdir();
        }
        File file = new File(dir, "MyMessage.txt");
        try {
            fileOutputStream = new FileOutputStream(file, true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    } else {
        Toast.makeText(getApplicationContext(), "SDcard not found", Toast.LENGTH_LONG).show();
    }

    OnStore = (ToggleButton) findViewById(R.id.onStore);
    OnStore.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            if (OnStore.isChecked()){
                try {
                    for(double TotalAccelerate : list){
                       // System.out.println(TotalAccelerate);
                        String space = "\n";
                        byte[] convert = space.getBytes();
                        fileOutputStream.write(convert);
                        String finalData;
                        finalData = String.valueOf(TotalAccelerate);
                        fileOutputStream.write(finalData.getBytes());
                    }
                    // fileOutputStream.close();
                    Toast.makeText(getApplicationContext(), "Message saving", Toast.LENGTH_LONG).show();

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }if (!OnStore.isChecked()){
                try {
                    fileOutputStream.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    fileOutputStream.close();
                    list.clear();
                    Collections.synchronizedList(list);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Toast.makeText(getApplicationContext(),"Message Stopped.",Toast.LENGTH_LONG).show();

            }


        }

    });
 }//End OnCreate( )


@Override
public final void onSensorChanged(SensorEvent event) {
    // The light sensor returns a single value.
    // Many sensors return 3 values, one for each axis.
    double xx = event.values[0];
    double yy = event.values[1];
    double zz = event.values[2];
    TotalAccelerate = Math.round(Math.sqrt(Math.pow(xx, 2)
            + Math.pow(yy, 2)
            + Math.pow(zz, 2)));
    Log.i(DEBUG, "Accelerometer = " + TotalAccelerate);

    list.add(TotalAccelerate);
    findPeaks(list);
   sensorText.setText("Total: " + TotalAccelerate);
    Log.i(DEBUG, "list values " + list);

}

【问题讨论】:

  • 你的问题是什么?
  • 我需要将加速度计中的所有样本输入到 .txt 文件中,直到我关闭按钮。我该怎么做
  • 你能帮忙吗?

标签: android performance android-studio android-fragments android-sensors


【解决方案1】:

问题似乎在于Android由于激进的电源管理而禁用屏幕并停止不可见的进程和活动。

要克服这个问题,您需要在单独的线程中运行代码并获取唤醒锁,因此手机不会进入睡眠模式。但是,更好的解决方案是创建一个服务(仍然需要在单独的线程中运行代码)来负责处理传感器。

【讨论】:

  • 我可以在代码中为当前级别添加什么吗?
  • 这并不容易推荐。基本上,我在答案中描述了您需要做什么以及代码中可能存在的问题。如果你想让我写一个可行的解决方案,那么不幸的是,我现在无法帮助你。尝试查看互联网 - 有很多示例如何实现您的目标。
猜你喜欢
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
相关资源
最近更新 更多