0

Ich versuche, den Code alle Ergebnisse von TotalAccelerate in TXT-Datei schreiben zu lassen. der Code schreibt fast 25 bis 26 Samples und stoppt dann von selbst. Der ToggleButton-Code funktioniert nicht richtig, ich nehme an, dass die for-Schleife ein Problem dieser Samples erzeugt. Es sollten mehr Samples als 25 oder 26 sein. Es sollte alle Werte schreiben, damit ich sie für Offline-Zwecke verwenden kann, bis ich (! OnStore.isChecked()) ausschalte. Ich schätze Ihre Zusammenarbeit.Schreiben von Sensorwerten in eine Datei

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

Und was ist deine Frage wirklich? –

+0

Ich brauche alle Proben von Beschleunigungsmesser Feed in die TXT-Datei, bis ich die Schaltfläche ausschalten. Wie kann ich das tun –

+0

können Sie helfen oder was? –

Antwort

0

Es scheint, dass das Problem ist, dass Android wegen aggressiven Power-Management auf den Bildschirm deaktiviert und stoppt die Prozesse und Aktivitäten, die nicht sichtbar sind.

Um dies zu umgehen, müssen Sie Ihren Code in einem separaten Thread ausführen und ein Wakelock erwerben, damit das Telefon nicht in den Schlafmodus wechselt. Eine bessere Lösung besteht jedoch darin, einen Dienst zu erstellen (der noch Code in einem separaten Thread ausführen muss), der für den Umgang mit Sensoren zuständig ist.

+0

Gibt es etwas, das ich in meinem Code für das aktuelle Level hinzufügen kann? –

+0

Es ist nicht so einfach zu empfehlen. Grundsätzlich habe ich in der Antwort beschrieben, was Sie tun müssen und was ein Problem im Code sein kann. Wenn Sie möchten, dass ich eine funktionierende Lösung schreibe, dann kann ich Ihnen leider nicht helfen. Schauen Sie ins Internet - es gibt viele Beispiele, wie Sie Ihr Ziel erreichen können. – Yury