以共享首选项保存当前时间戳

时间:2014-08-24 09:12:43

标签: android sharedpreferences shake

我想制作一个应用程序,而且我是android新手。 我有10张照片。 当我摇动手机时,我希望每天用随机方法显示其中一张图片。 我写了摇动代码并随机显示这些图片,但我不能每天都展示其中一张。 你能帮我解释一下共享偏好的代码吗?

public class MainAccelerometer extends Activity implements AccelerometerListener{
ImageView favorit;
ImageView img;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    favorit = (ImageView)findViewById(R.id.favorit);
    img = (ImageView)findViewById(R.id.img);


    // Check onResume Method to start accelerometer listener
}

public void onAccelerationChanged(float x, float y, float z) {
    // TODO Auto-generated method stub

}

public void onShake(float force) {

    Random rand = new Random();
    int rndInt = rand.nextInt(10) + 1; // n = the number of images, that start at idx 1
    String imgName = "img" + rndInt;
    int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
    img.setImageResource(id);

    // Do your stuff here
    // Called when Motion Detected
    Toast.makeText(getBaseContext(), "shake",
            Toast.LENGTH_SHORT).show();
    favorit.setBackgroundResource(R.drawable.img2);

}

@Override
public void onResume() {
    super.onResume();
    Toast.makeText(getBaseContext(), "onResume Accelerometer Started",
            Toast.LENGTH_SHORT).show();

    //Check device supported Accelerometer senssor or not
    if (AccelerometerManager.isSupported(this)) {

        //Start Accelerometer Listening
        AccelerometerManager.startListening(this);
    }
}

@Override
public void onStop() {
    super.onStop();

    //Check device supported Accelerometer senssor or not
    if (AccelerometerManager.isListening()) {

        //Start Accelerometer Listening
        AccelerometerManager.stopListening();

        Toast.makeText(getBaseContext(), "onStop Accelerometer Stoped",
                Toast.LENGTH_SHORT).show();
    }

}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.i("Sensor", "Service  distroy");

    //Check device supported Accelerometer senssor or not
    if (AccelerometerManager.isListening()) {

        //Start Accelerometer Listening
        AccelerometerManager.stopListening();
        Toast.makeText(getBaseContext(), "onDestroy Accelerometer Stoped",
                Toast.LENGTH_SHORT).show();
    }
}}

和其他班级

public class AccelerometerManager {

private static Context aContext=null;


/** Accuracy configuration */
private static float threshold  = 15.0f;
private static int interval     = 200;

private static Sensor sensor;
private static SensorManager sensorManager;
// you could use an OrientationListener array instead
// if you plans to use more than one listener
private static AccelerometerListener listener;

/** indicates whether or not Accelerometer Sensor is supported */
private static Boolean supported;
/** indicates whether or not Accelerometer Sensor is running */
private static boolean running = false;

/**
 * Returns true if the manager is listening to orientation changes
 */
public static boolean isListening() {
    return running;
}

/**
 * Unregisters listeners
 */
public static void stopListening() {
    running = false;
    try {
        if (sensorManager != null && sensorEventListener != null) {
            sensorManager.unregisterListener(sensorEventListener);
        }
    } catch (Exception e) {}
}

/**
 * Returns true if at least one Accelerometer sensor is available
 */
public static boolean isSupported(Context context) {
    aContext = context;
    if (supported == null) {
        if (aContext != null) {


            sensorManager = (SensorManager) aContext.
                    getSystemService(Context.SENSOR_SERVICE);

            // Get all sensors in device
            List<Sensor> sensors = sensorManager.getSensorList(
                    Sensor.TYPE_ACCELEROMETER);

            supported = new Boolean(sensors.size() > 0);



        } else {
            supported = Boolean.FALSE;
        }
    }
    return supported;
}

/**
 * Configure the listener for shaking
 * @param threshold
 *             minimum acceleration variation for considering shaking
 * @param interval
 *             minimum interval between to shake events
 */
public static void configure(int threshold, int interval) {
    AccelerometerManager.threshold = threshold;
    AccelerometerManager.interval = interval;
}

/**
 * Registers a listener and start listening
 * @param accelerometerListener
 *             callback for accelerometer events
 */
public static void startListening( AccelerometerListener accelerometerListener )
{

    sensorManager = (SensorManager) aContext.
            getSystemService(Context.SENSOR_SERVICE);

    // Take all sensors in device
    List<Sensor> sensors = sensorManager.getSensorList(
            Sensor.TYPE_ACCELEROMETER);

    if (sensors.size() > 0) {

        sensor = sensors.get(0);

        // Register Accelerometer Listener
        running = sensorManager.registerListener(
                sensorEventListener, sensor,
                SensorManager.SENSOR_DELAY_GAME);

        listener = accelerometerListener;
    }


}

/**
 * Configures threshold and interval
 * And registers a listener and start listening
 * @param accelerometerListener
 *             callback for accelerometer events
 * @param threshold
 *             minimum acceleration variation for considering shaking
 * @param interval
 *             minimum interval between to shake events
 */
public static void startListening(
        AccelerometerListener accelerometerListener,
        int threshold, int interval) {
    configure(threshold, interval);
    startListening(accelerometerListener);
}

/**
 * The listener that listen to events from the accelerometer listener
 */
private static SensorEventListener sensorEventListener =
        new SensorEventListener() {

            private long now = 0;
            private long timeDiff = 0;
            private long lastUpdate = 0;
            private long lastShake = 0;

            private float x = 0;
            private float y = 0;
            private float z = 0;
            private float lastX = 0;
            private float lastY = 0;
            private float lastZ = 0;
            private float force = 0;

            public void onAccuracyChanged(Sensor sensor, int accuracy) {}

            public void onSensorChanged(SensorEvent event) {
                // use the event timestamp as reference
                // so the manager precision won't depends
                // on the AccelerometerListener implementation
                // processing time
                now = event.timestamp;

                x = event.values[0];
                y = event.values[1];
                z = event.values[2];

                // if not interesting in shake events
                // just remove the whole if then else block
                if (lastUpdate == 0) {
                    lastUpdate = now;
                    lastShake = now;
                    lastX = x;
                    lastY = y;
                    lastZ = z;
                    Toast.makeText(aContext,"no",
                            Toast.LENGTH_SHORT).show();
                } else {
                    timeDiff = now - lastUpdate;

                    if (timeDiff > 0) {

                /*force = Math.abs(x + y + z - lastX - lastY - lastZ)
                            / timeDiff;*/
                        force = Math.abs(x + y + z - lastX - lastY - lastZ);

                        if (Float.compare(force, threshold) >0 ) {
                            //Toast.makeText(Accelerometer.getContext(),
                            //(now-lastShake)+"  >= "+interval, 1000).show();

                            if (now - lastShake >= interval) {

                                // trigger shake event
                                listener.onShake(force);
                            }
                            else
                            {
                                Toast.makeText(aContext,"No Motion detected",
                                        Toast.LENGTH_SHORT).show();
                            }
                            lastShake = now;
                        }
                        lastX = x;
                        lastY = y;
                        lastZ = z;
                        lastUpdate = now;
                    }
                    else
                    {
                      Toast.makeText(aContext,"No Motion detected", Toast.LENGTH_SHORT).show();

                    }
                }
                // trigger change event
                listener.onAccelerationChanged(x, y, z);
            }

        };}

1 个答案:

答案 0 :(得分:0)

嘿你可以使用这个方法来计算当前的timeStamp并计算时差。

/*
* This method is calling to get current date
*
* */



public static String getCurrentDateWitTime() {
    Calendar c = Calendar.getInstance();
    // SimpleDateFormat df = new SimpleDateFormat(" yyyy-MM-dd'T'HH:mm:ss'Z");
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String formattedDate = df.format(c.getTime());
    return formattedDate;
}


public static long getDifference(String oldTime)
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date oldDate = null;
    try {
        oldDate = dateFormat.parse(oldTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Date cDate = new Date();
    Long timeDiff = cDate.getTime() - oldDate.getTime();
enter code here
    long diffInSec = TimeUnit.MILLISECONDS.toSeconds(timeDiff);
    return  diffInSec;
}