0

私はコードに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); 

} 
+0

本当にあなたの質問は何ですか? –

+0

ボタンをオフにするまで、加速度計のフィードのすべてのサンプルを.txtファイルに保存する必要があります。どうすればいいのですか? –

+0

助けてもらえますか? –

答えて

0

問題があるため、積極的な電源管理のAndroidの画面を無効にし、表示されていないプロセスや活動を停止することであると思われます。

この問題を解決するには、別のスレッドでコードを実行してwakelockを取得する必要があります。したがって、電話機はスリープモードに入りません。しかし、より良い解決策は、センサを扱う責任を負うサービス(まだ別のスレッドでコードを実行する必要がある)を作成することです。

+0

現在のレベルのコードに追加できるものはありますか? –

+0

それは推薦するのは簡単ではありません。基本的には、あなたがしなければならないことと、コード内で何が問題になるのか、答えに記述しました。あなたが私に実用的な解決策を書いてもらいたいのであれば、残念ながら、私は今あなたのお手伝いができません。インターネットを見てみてください - あなたの目標を達成する方法の例がたくさんあります。 – Yury

関連する問題