将当前时间戳保存在共享首选项中

2024-02-22

我想做一个应用程序,而且我是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);
            }

        };}

嘿,您可以使用此方法来获取当前时间戳并计算时间差。

/*
* 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将当前时间戳保存在共享首选项中 的相关文章

  • Android:如何在多语言资源中重用字符串

    自从我的第一个 Android 项目以来 这个问题一直困扰着我 考虑以 en 作为默认值的多语言字符串资源 res values strings xml lt The default language en res values de st
  • Robolectric 1.2:“警告:无法找到 Android SDK 的路径”

    I used Robolectric 1 1 jar 与依赖项 在我的项目中并成功使其工作 但是当我将罐子更改为 1 2 SNAPSHOT jar 与依赖项 我收到以下警告 警告 无法找到 Android SDK 的路径 两个jar包都下载
  • 如何在Android中将文件转换为base64(如.pdf、.text)?

    如何将 SD 卡文档 pdf txt 转换为 Base 64 字符串并将字符串发送到服务器 这个方法对我有用 String encodeFileToBase64Binary encodeFileToBase64Binary yourFile
  • 删除SD卡上的文件夹

    I tried File delete 但它不起作用 如何删除SD卡上的目录 我正在开发 Android 2 1 在删除目录本身之前 您必须将所有目录清空 请参阅here http www rgagnon com javadetails j
  • 这样理解Activity类似于iOS中的ViewController就可以了吗?

    这样理解Activity类似于iOS中的ViewController就可以了吗 我很困惑接受 Android 中的术语概念 如 活动 服务 等 是的 我想说 Activity 和 ViewController 非常相似 只有一个很大的区别
  • Android - 如何设置所有屏幕的背景颜色?

    维护字体和颜色样式的最佳实践是什么 我制作了一个 color xml 文件 用于更改按钮等单独元素的颜色 但我不确定 Android 希望开发人员如何组织他们的样式 例如 我希望所有屏幕都具有相同的背景颜色 我怎么做 我需要为每个 Acti
  • Android Fragment 中的 SharedPreferences

    我正在尝试读取 Fragment 内的 SharedPreferences 我的代码用于获取任何其他活动中的首选项 SharedPreferences preferences getSharedPreferences pref 0 我收到错
  • Android 上 WebRTC 的自定义视频源

    Overview 我想使用自定义视频源通过 WebRTC Android 实现来直播视频 如果我理解正确的话 现有的实现仅支持 Android 手机上的前置和后置摄像头 以下类与此场景相关 Camera1Enumerator java ht
  • Android“权限拒绝:无法使用相机”

    我正在学习有关在 Android 应用程序中使用相机的教程 我收到错误 权限被拒绝 无法使用相机 在模拟器和物理设备上运行调试时 我在清单文件中尝试了各种权限 似乎大多数遇到此错误的人都遇到了拼写错误 缺少权限或权限不在清单中的正确位置 这
  • Android键盘点击搜索输入时出现和消失

    我在用谷歌地图 Js API当我搜索一个地方时 我的输入搜索栏工作正常 当我通过 iPhone 设备使用它时 它也工作得很好 但是当我通过Android 设备然后键盘立即出现和消失 我已经找到了一些关于当我按下搜索栏时 android 键盘
  • 如何以编程方式设置 ConstraintLayout 的 XML 属性“layout_constrainedWidth”?

    ConstraintLayout中 如何转换xml属性 app layout constrainedWidth true false in code 如果你想设置constrainedWidth Height以编程方式 那么你必须采取Con
  • Textview 第一次点击时为空,但第二次点击时更新

    它是使用兼容性包的小型 Android 2 2 测试应用程序 我正在尝试更新列表项选择上另一个活动的另一个片段上的文本视图 但问题是 每次第一次单击都会返回空指针异常 并且只有在第二次尝试时 其文本才会更改 我想知道为什么会发生这种情况以及
  • Android 中 Activity 的服务回调

    我有我的 GPSTracker 的摘要 它返回用户的位置 其作品 public class GPSTracker extends Service implements LocationListener public GPSTracker C
  • 在 NumberPicker 中显示更多数字

    我有两个问题 第一个问题是删除 NumberPicker 中的分隔线 我在 Android 中扩展 NumberPicker 来解决这个问题 如下所示 import android content Context import androi
  • 尝试在后台使用 AsyncTask 解析 JSON 时强制关闭

    我是 Android 开发新手 正在研究 json 数据 我设法让解析工作 我想显示一个 ProgressDialog 我读到我需要使用 AsyncTask 但由于某种原因 一旦我将相同的工作代码放入 doInBackground 中 即使
  • Android smoothScrollTo 不调用 onScrollStateChanged

    我在用smoothScrollBy 滚动到 a 中的特定位置ListView 我希望在以下情况时得到通知ListView完成滚动以将其与当前集成onScrollStateChanged 当用户用手指滚动时触发的事件 目前我正在使用Timer
  • DOM 中不再存在缓存元素

    就像在类似的问题中一样 我使用appium java 尝试选择元素 在移动应用程序中 我要转到页面 之后有许多元素 android widget ImageView 0 我需要选择 6 个 例如 这样的元素并执行其他步骤 Byt 只能选择一
  • 我收到“循环依赖”Android Dagger Hilt 错误

    我从头开始检查了所有内容 但找不到错误 我找不到错误 可能是什么 我收到以下编译错误 HomeViewModel java 6 error ComponentProcessor MiscError dagger internal codeg
  • Visual Studio代码无法检测到模拟器设备或连接的电话

    I was running my app with vscode using Android emulator or my phone however all of a sudden vscode could not identify an
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了

随机推荐