0

我已经制作了这个应用程序,它计算所有维度设备的线性加速度,将其组合并计算净加速度。前五个加速度值存储在 Shared Preference 键值对中。

问题是当我关闭应用程序并重新打开它时,我发现值增加到了更高的水平。我似乎没有从代码中抓住它发生的地方。

请帮帮我。

ShakoMeter.java(这是我收集和存储所有传感器数据的主要活动)

package com.example.shake_o_meter;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class ShakeOMeter extends Activity implements SensorEventListener{

    float ro(double ax2) {
          DecimalFormat df = new DecimalFormat("#.###");
          return Float.valueOf(df.format(ax2));
        }

    SensorManager smngr;
    Sensor sen;
    TextView t,t3;
    double max=-1;
    double ax = 0,ay = 0,az = 0;
    SharedPreferences sharedPref;
    SharedPreferences.Editor editor;
    ArrayList<Float> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shake_ometer);
        t = (TextView)findViewById(R.id.TextView1);


        // Showing initial message
        TextView textview = new TextView(getApplicationContext());
        textview.setText("Get ready to Shake It!!");
        textview.setBackgroundColor(Color.BLACK);
        textview.setTextColor(Color.WHITE);
        textview.setTextSize(30);
        textview.setPadding(10,10,10,10);
        textview.setGravity(Gravity.CENTER_VERTICAL);
        Toast toast = new Toast(getApplicationContext());
        toast.setView(textview);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.FILL, 0, 0);
        toast.show();

        //Getting Sensor Control
        smngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sen = (Sensor) smngr.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);

        //Obtaining SharedPreferance for storing key-value pairs of high scores.
        sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
        editor = sharedPref.edit();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.shake_ometer, menu);
        return true;
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        list = new ArrayList<Float>();
        ax = event.values[0];
        ay = event.values[1];
        az = event.values[2];
        double temp=Math.sqrt(ro(ax)*ro(ax)+ro(ay)*ro(ay)+ro(az)*ro(az));
        if(temp>=max){
            max=temp;
            t.setText(ro(max)+"");
            list.add(sharedPref.getFloat("1", 0));
            list.add(sharedPref.getFloat("2", 0));
            list.add(sharedPref.getFloat("3", 0));
            list.add(sharedPref.getFloat("4", 0));
            list.add(sharedPref.getFloat("5", 0));
            if(max>list.get(0)){
                list.remove(0);
                list.add((float) max);
                Collections.sort(list);
                editor.putFloat("1", list.get(0));
                editor.putFloat("2", list.get(1));
                editor.putFloat("3", list.get(2));
                editor.putFloat("4", list.get(3));
                editor.putFloat("5", list.get(4));
                editor.commit();
                System.out.println(sharedPref.getFloat("5", 0)+" "
                        +sharedPref.getFloat("4", 0)+" "
                        +sharedPref.getFloat("3", 0)+" "
                        +sharedPref.getFloat("2", 0)+" "
                        +sharedPref.getFloat("1", 0));
            }
        }
    }



    public void onClickReset(View view){
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }

    public void onClickTopFive(View view){
        Intent intent = new Intent(getApplicationContext(),TopFive.class);
        startActivity(intent);
    }

    @Override
    protected void onResume(){
        super.onResume();
        final ShakeOMeter sh = this;
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // Do something after 5s = 5000ms
                 smngr.registerListener(sh, sen, SensorManager.SENSOR_DELAY_NORMAL);

            }
        },3000);


    }

     @Override
      protected void onPause() {
        super.onPause();
        smngr.unregisterListener(this);
      }

     protected void onStop(){
         super.onStop();
         smngr.unregisterListener(this);

     }

     public void onDestroy(){
         super.onDestroy();
         smngr.unregisterListener(this);
         finish();
     }

}

TopFive.java(这是一个子 Activity,其中显示了前五个活动)

package com.example.shake_o_meter;

import java.text.DecimalFormat;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class TopFive extends Activity {

    float ro(double ax2) {
          DecimalFormat df = new DecimalFormat("#.###");
          return Float.valueOf(df.format(ax2));
        }

    SharedPreferences sharedPref;
    SharedPreferences.Editor edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_top_five);
        // Show the Up button in the action bar.
        setupActionBar();
        TextView t1 = (TextView) findViewById(R.id.T1);
        TextView t2 = (TextView) findViewById(R.id.T2);
        TextView t3 = (TextView) findViewById(R.id.T3);
        TextView t4 = (TextView) findViewById(R.id.T4);
        TextView t5 = (TextView) findViewById(R.id.T5);
        sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
        edit = sharedPref.edit();
        t1.setText(ro(sharedPref.getFloat("1", 0))+"");
        t2.setText(ro(sharedPref.getFloat("2", 0))+"");
        t3.setText(ro(sharedPref.getFloat("3", 0))+"");
        t4.setText(ro(sharedPref.getFloat("4", 0))+"");
        t5.setText(ro(sharedPref.getFloat("5", 0))+"");
    }

    public void onClickReset(View view){
        edit.putFloat("1", 0);edit.commit();
        edit.putFloat("2", 0);edit.commit();
        edit.putFloat("3", 0);edit.commit();
        edit.putFloat("4", 0);edit.commit();
        edit.putFloat("5", 0);edit.commit();
        Intent intent = getIntent();
        finish();
        startActivity(intent);

    }

    /**
     * Set up the {@link android.app.ActionBar}, if the API is available.
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.top_five, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            // This ID represents the Home or Up button. In the case of this
            // activity, the Up button is shown. Use NavUtils to allow users
            // to navigate up one level in the application structure. For
            // more details, see the Navigation pattern on Android Design:
            //
            // http://developer.android.com/design/patterns/navigation.html#up-vs-back
            //
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}
4

0 回答 0