Chinaunix首页 | 论坛 | 博客
  • 博客访问: 181465
  • 博文数量: 42
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 440
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-18 09:54
文章分类
文章存档

2011年(1)

2010年(13)

2009年(28)

我的朋友

分类: 嵌入式

2010-12-20 17:18:55

1、时间设置应用程序

文件:packages/apps/Settings/src/com/android/settings/DateTimeSettings.java
在onDateSet和onTimeSet函数中会调用"SystemClock.setCurrentTimeMillis(when);"来设置时间。

2、setCurrentTimeMills函数

文件:frameworks/base/core/java/android/os/SystemClock.java

native public static boolean setCurrentTimeMillis(long millis);

其JNI实现在文件frameworks/base/core/jni/android_os_SystemClock.cpp中:

static jboolean android_os_SystemClock_setCurrentTimeMillis(JNIEnv* env,

    jobject clazz, jlong millis)

{

    return (setCurrentTimeMillis(millis) == 0);

}

转向如下文件

文件:frameworks/base/libs/utils/SystemClock.cpp

int setCurrentTimeMillis(int64_t millis)

{

...

#if HAVE_ANDROID_OS

    fd = open("/dev/alarm", O_RDWR);

    if(fd < 0) {

        LOGW("Unable to open alarm driver: %s\n", strerror(errno));

        return -1;

    }

    ts.tv_sec = tv.tv_sec;

    ts.tv_nsec = tv.tv_usec * 1000;

    res = ioctl(fd, ANDROID_ALARM_SET_RTC, &ts);

    if(res < 0) {

        LOGW("Unable to set rtc to %ld: %s\n", tv.tv_sec, strerror(errno));

        ret = -1;

    }

    close(fd);

#else

...

}

也就是对设备/dev/alarm进行操作

阅读(3915) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~