前言 Ubuntu系统版本:12.04 Android源码文件夹名:aosp Goldfish内核文件夹名:goldfish 项目工程名:Tslights 本项目使用多寄存器变量存取 程序运行效果: 1.1 底层驱动程序代码编写 文件结构 ~/goldfish2.6.29/drivers —–tslights.h —–tslights.c —–Kconfig —–Makefile tslights.h tslights.c Kconfig Makefile 1.2 修改内核Kconfig文件 打开arch/arm/Kconfig文件 在这两行之间 menu “Device Drivers” ….. endmenu 插入 source “drivers/tslgihts/Kconfig” 1.3 修改内核Makefile文件 打开drivers/Makefile文件,在里面添加以下一行内容: …… obj-$(CONFIG_TSLIGHTS)+=tslights/ 1.4 编译内核驱动程序模块 在goldfish目录下执行 make menuconfig命令来配置它的编译方式 选择 “Device Drivers” 回车 选择 Fake Register Driver项按Y键 配置完成后保存编译配置,退出make menuconfig命令。 接着执行 ./build_kernel.sh命令 1.5 编写硬件抽象层模块接口 文件结构: ~/aosp/hardware/libhardware —–include/hardware tslights.h —–modules/tslights tslights.cpp android.mk tslights.h tslights.cpp Android.mk 执行mmm和make snod命令对其进行编译和打包 1.6 处理硬件设备访问权限问题 1、解压ramdisk.img镜像文件 2、还原ramdisk.img镜像文件 3、修改ueventd.rc文件 进入ramdisk目录中,打开ueventd.rc文件,向文件里添加以下内容: /dev/tslights 0666 root root 4、重新打包ramdisk.img镜像文件 1.7 定义硬件访问服务接口 文件结构: ~/aosp/frameworks/base/core/java/android/os —–ITslightsService.aidl ITslightsService.aidl 进入到frameworks/base目录中,打开Android.mk文件,修改LOCAL_SRC_FILES变量的值 添加 core/java/android/os/ITslightsService.aidl 编译硬件访问服务接口 1.8 实现硬件访问服务 文件结构: ~/aosp/frameworks/base/service/java/com/anroid/server —–TslightsService.java TslightsService.java 执行mmm命令编译services模块 1.9 实现硬件访问服务的JNI方法 文件结构: ~/aosp/frameworks/base/service/jni/ —–com_android_server_TslightsService.cpp com_android_server_TslightsService.cpp 进入到frameworks/base/services/jni目录中,打开Android.mk文件,修改变量LOCAL_SRC_FILES的值 LOCAL_SRC_FILES += …… com_android_server_TslightsService.cpp/ onload.cpp 修改完成后,执行mmm命令来重新编译libandroid_servers模块 1.10 启动硬件访问服务 进入到frameworks/base/services/java/com/android/server目录中,打开SystemServer.java文件,修改ServerThread类的成员函数run的实现: try { 最后,执行mmm和make snod命令 2.1开发Android应用程序 文件结构: ~/aosp/packages/experimental/Tslights —–AndroidManifest.xml —–Android.mk —–src —–clear/zhang/tslights Tslights.java —–res —–layout Main..xml —–drewable icon.png pred.jpg pgreen.jpg pyellow.jpg —–values Strings.xml Tslights.java main.xml 各文件编写好后,进行编译和打包 最后,启动模拟器 注:若启动模拟器发现一直停留在开机动画页面的话,请执行make命令后,再重新启动模拟器。 附源码包链接:https://download.csdn.net/download/qq_40789901/12667732
#ifndef _FAKE_REG_H_ #define _FAKE_REG_H_ #include <linux/cdev.h> #include <linux/semaphore.h> #define TSLIGHTS_DEVICE_NODE_NAME "tslights" #define TSLIGHTS_DEVICE_FILE_NAME "tslights" #define TSLIGHTS_DEVICE_PROC_NAME "tslights" #define TSLIGHTS_DEVICE_CLASS_NAME "tslights" struct tslights_dev { int red_init;//红灯状态值 int red_time;//红灯时间 int green_init; int green_time; int yellow_init; int yellow_time; }; #endif
#include <linux/init.h> #include <linux/module.h> #include <linux/types.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/device.h> #include <asm/uaccess.h> #include "tslights.h" static int tslights_major = 0; static int tslights_minor = 0; static struct cdev rdev; // 定义字符设备 static struct class* tslights_class = NULL; static struct tslights_dev* tslightsdev = NULL; static char tslights_buff[256]; static ssize_t tslights_read(struct file* filp, char __user *buf, size_t count, loff_t* f_pos) { copy_to_user((struct tslights_dev __user *)buf, tslightsdev, sizeof(struct tslights_dev)); return 0; } static ssize_t tslights_write(struct file* filp, const char __user *buf, size_t count, loff_t* f_pos) { copy_from_user(tslightsdev, (struct tslights_dev __user *)buf, count); return 0; } static struct file_operations tslights_ops = { .owner = THIS_MODULE, .read = tslights_read, .write = tslights_write, }; static ssize_t tslights_proc_read(char* page, char** start, off_t off, int count, int* eof, void* data) { if(off > 0) { *eof = 1; return 0; } int len; int* red_init = (int*)kmalloc(64, GFP_KERNEL); int* red_time = (int*)kmalloc(64, GFP_KERNEL); int* green_init = (int*)kmalloc(64, GFP_KERNEL); int* green_time = (int*)kmalloc(64, GFP_KERNEL); int* yellow_init = (int*)kmalloc(64, GFP_KERNEL); int* yellow_time = (int*)kmalloc(64, GFP_KERNEL); sprintf(red_init, "%d", tslightsdev->red_init); sprintf(red_time, "%d", tslightsdev->red_time); sprintf(green_init, "%d", tslightsdev->green_init); sprintf(green_time, "%d", tslightsdev->green_time); sprintf(yellow_init, "%d", tslightsdev->yellow_init); sprintf(yellow_time, "%d", tslightsdev->yellow_time); memset(tslights_buff, 0, 256); strcat(tslights_buff,"red state:"); strcat(tslights_buff,red_init); strcat(tslights_buff," red time:"); strcat(tslights_buff,red_time); strcat(tslights_buff,"green state:"); strcat(tslights_buff,green_init); strcat(tslights_buff," green time:"); strcat(tslights_buff,green_time); strcat(tslights_buff,"yellow state:"); strcat(tslights_buff,yellow_init); strcat(tslights_buff," yellow time:"); strcat(tslights_buff,yellow_time); kfree(red_init); kfree(red_time); kfree(green_init); kfree(green_time); kfree(yellow_init); kfree(yellow_time); len=sprintf(page,tslights_buff); return len; } static ssize_t tslights_proc_write(struct file* filp, const char __user *buff, unsigned long len, void* data) { return 0; } static void tslights_create_proc(void) { struct proc_dir_entry* entry; entry = create_proc_entry(TSLIGHTS_DEVICE_PROC_NAME, 0, NULL); if(entry) { entry->owner = THIS_MODULE; entry->read_proc = tslights_proc_read; entry->write_proc = tslights_proc_write; } } static void tslights_remove_proc(void) { remove_proc_entry(TSLIGHTS_DEVICE_PROC_NAME, NULL); } // 初始化模块时操作 static int __init tslights_init(void) { int result; dev_t dev = 0; tslightsdev = (struct tslights_dev*) kmalloc(sizeof(struct tslights_dev), GFP_KERNEL); alloc_chrdev_region(&dev, 0, 1, TSLIGHTS_DEVICE_NODE_NAME); tslights_major = MAJOR(dev); tslights_minor = MINOR(dev); cdev_init(&rdev, &tslights_ops); result = cdev_add(&rdev, dev, 1); tslights_create_proc(); tslightsdev->green_init=1; tslightsdev->yellow_init=0; tslightsdev->red_init = 0; tslightsdev->green_time=10; tslightsdev->yellow_time=3; tslightsdev->red_time=8; tslights_class = class_create(THIS_MODULE, TSLIGHTS_DEVICE_CLASS_NAME); struct device* RCtemp = device_create(tslights_class, NULL, dev, "%s", TSLIGHTS_DEVICE_FILE_NAME); // 创建一个字符结点文件 if (result < 0) goto add_err; return 0; add_err: unregister_chrdev_region(dev, 1); return -1; } // 卸载模块时操作 static void __exit tslights_exit(void) { dev_t dev = MKDEV(tslights_major, tslights_minor); tslights_remove_proc(); cdev_del(&rdev); kfree(tslightsdev); unregister_chrdev_region(dev, 1); } MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TSLights Register Driver"); module_init(tslights_init); module_exit(tslights_exit);
config TSLIGHTS tristate "Tslights Register Driver" default n help This is the tslights driver for android system.
obj-$(CONFIG_TSLIGHTS) += tslights.o
#ifndef ANDROID_TSLIGHTS_INTERFACE_H #define ANDROID_TSLIGHTS_INTERFACE_H #include <hardware/hardware.h> __BEGIN_DECLS /** * The id of this module */ #define TSLIGHTS_HARDWARE_MODULE_ID "tslights" /** * The id of this device */ #define TSLIGHTS_HARDWARE_DEVICE_ID "tslights" struct tslights_module_t { struct hw_module_t common; }; struct tslights_dev { int red_init; int red_time; int green_init; int green_time; int yellow_init; int yellow_time; }; struct tslights_device_t { struct hw_device_t common; int fd; int (*set_tslightsdev)(struct tslights_device_t* dev,struct tslights_dev tslightsdev); int (*get_tslightsdev)(struct tslights_device_t* dev,struct tslights_dev* tslightsdev); }; __END_DECLS #endif
#define LOG_TAG "tslightsHALStub" #include <hardware/hardware.h> #include <hardware/tslights.h> #include <fcntl.h> #include <errno.h> #include <cutils/log.h> #include <cutils/atomic.h> #define DEVICE_NAME "/dev/tslights" #define MODULE_NAME "tslights" #define MODULE_AUTHOR "Clear_Zhang" static int tslights_device_open(const struct hw_module_t* module, const char* id, struct hw_device_t** device); static int tslights_device_close(struct hw_device_t* device); static int tslights_set_tslightsdev(struct tslights_device_t* dev,struct tslights_dev tslightsdev); static int tslights_get_tslightsdev(struct tslights_device_t* dev,struct tslights_dev* tslightsdev); static struct hw_module_methods_t tslights_module_methods = { open: tslights_device_open }; struct tslights_module_t HAL_MODULE_INFO_SYM = { common: { tag: HARDWARE_MODULE_TAG, version_major: 1, version_minor: 0, id: TSLIGHTS_HARDWARE_MODULE_ID, name: MODULE_NAME, author: MODULE_AUTHOR, methods: &tslights_module_methods, } }; static int tslights_device_open(const struct hw_module_t* module, const char* id, struct hw_device_t** device) { if(!strcmp(id, TSLIGHTS_HARDWARE_DEVICE_ID)) { struct tslights_device_t* dev; struct tslights_dev* tslightsdev = (struct tslights_dev*)malloc(sizeof(struct tslights_dev)); dev = (struct tslights_device_t*)malloc(sizeof(struct tslights_device_t)); if(!dev) { LOGE("Failed to alloc space for tslights_device_t."); return -EFAULT; } memset(dev, 0, sizeof(struct tslights_device_t)); dev->common.tag = HARDWARE_DEVICE_TAG; dev->common.version = 0; dev->common.module = (hw_module_t*)module; dev->common.close = tslights_device_close; dev->set_tslightsdev = tslights_set_tslightsdev; dev->get_tslightsdev = tslights_get_tslightsdev; if((dev->fd = open(DEVICE_NAME, O_RDWR)) == -1) { LOGE("Failed to open device file /dev/tslights -- %s.", strerror(errno)); free(dev); return -EFAULT; } *device = &(dev->common); LOGI("Open device file /dev/tslights successfully."); return 0; } return -EFAULT; } static int tslights_device_close(struct hw_device_t* device) { struct tslights_device_t* tslights_device = (struct tslights_device_t*)device; if(tslights_device) { close(tslights_device->fd); free(tslights_device); } return 0; } static int tslights_set_tslightsdev(struct tslights_device_t* dev, struct tslights_dev tslightsdev) { if(!dev) { LOGE("Null dev pointer."); return -EFAULT; } LOGI("Set value %d to device file /dev/tslights.", tslightsdev.red_init); write(dev->fd, &tslightsdev, sizeof(struct tslights_dev)); return 0; } static int tslights_get_tslightsdev(struct tslights_device_t* dev,struct tslights_dev* tslightsdev) { if(!dev) { LOGE("Null dev pointer."); return -EFAULT; } if(!tslightsdev) { LOGE("Null val pointer."); return -EFAULT; } read(dev->fd, tslightsdev, sizeof(struct tslights_dev)); LOGI("Get value %d from device file /dev/tslights.", tslightsdev->red_init); return 0; }
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_PRELINK_MODULE := false LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw LOCAL_SHARED_LIBRARIES := liblog LOCAL_SRC_FILES := tslights.cpp LOCAL_MODULE := tslights.default include $(BUILD_SHARED_LIBRARY)
package android.os; interface ITslightsService { void setRed_init(int red_init); int getRed_init(); void setRed_time(int red_time); int getRed_time(); void setGreen_init(int green_init); int getGreen_init(); void setGreen_time(int green_time); int getGreen_time(); void setYellow_init(int yellow_init); int getYellow_init(); void setYellow_time(int yellow_time); int getYellow_time(); }
package com.android.server; import android.content.Context; import android.os.ITslightsService; import android.util.Slog; public class TslightsService extends ITslightsService.Stub { private static final String TAG = "TslightsService"; private int mPtr = 0; TslightsService() { mPtr = init_native(); if(mPtr == 0) { Slog.e(TAG, "Failed to initialize tslights service."); } } public void setRed_init(int red_init) { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return; } setRed_init_native(mPtr, red_init); } public int getRed_init() { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return 0; } return getRed_init_native(mPtr); } public void setRed_time(int red_time) { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return; } setRed_time_native(mPtr, red_time); } public int getRed_time() { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return 0; } return getRed_time_native(mPtr); } public void setGreen_init(int green_init) { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return; } setGreen_init_native(mPtr, green_init); } public int getGreen_init() { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return 0; } return getGreen_init_native(mPtr); } public void setGreen_time(int green_time) { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return; } setGreen_time_native(mPtr, green_time); } public int getGreen_time() { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return 0; } return getGreen_time_native(mPtr); } public void setYellow_init(int yellow_init) { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return; } setYellow_init_native(mPtr, yellow_init); } public int getYellow_init() { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return 0; } return getYellow_init_native(mPtr); } public void setYellow_time(int yellow_time) { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return; } setYellow_time_native(mPtr, yellow_time); } public int getYellow_time() { if(mPtr == 0) { Slog.e(TAG, "Tslights service is not initialized."); return 0; } return getYellow_time_native(mPtr); } private static native int init_native(); private static native void setRed_init_native(int ptr, int red_init); private static native int getRed_init_native(int ptr); private static native void setRed_time_native(int ptr, int red_time); private static native int getRed_time_native(int ptr); private static native void setGreen_init_native(int ptr, int green_init); private static native int getGreen_init_native(int ptr); private static native void setGreen_time_native(int ptr, int green_time); private static native int getGreen_time_native(int ptr); private static native void setYellow_init_native(int ptr, int yellow_init); private static native int getYellow_init_native(int ptr); private static native void setYellow_time_native(int ptr, int yellow_time); private static native int getYellow_time_native(int ptr); };
#define LOG_TAG "TslightsServiceJNI" #include "jni.h" #include "JNIHelp.h" #include "android_runtime/AndroidRuntime.h" #include <utils/misc.h> #include <utils/Log.h> #include <hardware/hardware.h> #include <hardware/tslights.h> #include <stdio.h> struct tslights_dev tslightsdev; namespace android { static void tslights_setRed_init(JNIEnv* env, jobject clazz, jint ptr, jint value) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return; } tslightsdev.red_init = value; LOGI("Set value %d to device tslights.", tslightsdev.red_init); device->set_tslightsdev(device, tslightsdev); } static jint tslights_getRed_init(JNIEnv* env, jobject clazz, jint ptr) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return 0; } device->get_tslightsdev(device, &tslightsdev); LOGI("Get value %d from device tslights.", tslightsdev.red_init); return tslightsdev.red_init; } /////////////////////////////////////////////////////////////////////////////////// static void tslights_setRed_time(JNIEnv* env, jobject clazz, jint ptr, jint value) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return; } tslightsdev.red_time = value; LOGI("Set value %d to device tslights.", tslightsdev.red_time); device->set_tslightsdev(device, tslightsdev); } static jint tslights_getRed_time(JNIEnv* env, jobject clazz, jint ptr) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return 0; } device->get_tslightsdev(device, &tslightsdev); LOGI("Get value %d from device tslights.", tslightsdev.red_time); return tslightsdev.red_time; } /////////////////////////////////////////////////////////////////////////////////// static void tslights_setGreen_init(JNIEnv* env, jobject clazz, jint ptr, jint value) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return; } tslightsdev.green_init = value; LOGI("Set value %d to device tslights.", tslightsdev.green_init); device->set_tslightsdev(device, tslightsdev); } static jint tslights_getGreen_init(JNIEnv* env, jobject clazz, jint ptr) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return 0; } device->get_tslightsdev(device, &tslightsdev); LOGI("Get value %d from device tslights.", tslightsdev.green_init); return tslightsdev.green_init; } /////////////////////////////////////////////////////////////////////////////////// static void tslights_setGreen_time(JNIEnv* env, jobject clazz, jint ptr, jint value) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return; } tslightsdev.green_time = value; LOGI("Set value %d to device tslights.", tslightsdev.green_time); device->set_tslightsdev(device, tslightsdev); } static jint tslights_getGreen_time(JNIEnv* env, jobject clazz, jint ptr) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return 0; } device->get_tslightsdev(device, &tslightsdev); LOGI("Get value %d from device tslights.", tslightsdev.green_time); return tslightsdev.green_time; } /////////////////////////////////////////////////////////////////////////////////// static void tslights_setYellow_init(JNIEnv* env, jobject clazz, jint ptr, jint value) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return; } tslightsdev.yellow_init = value; LOGI("Set value %d to device tslights.", tslightsdev.yellow_init); device->set_tslightsdev(device, tslightsdev); } static jint tslights_getYellow_init(JNIEnv* env, jobject clazz, jint ptr) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return 0; } device->get_tslightsdev(device, &tslightsdev); LOGI("Get value %d from device tslights.", tslightsdev.yellow_init); return tslightsdev.yellow_init; } /////////////////////////////////////////////////////////////////////////////////// static void tslights_setYellow_time(JNIEnv* env, jobject clazz, jint ptr, jint value) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return; } tslightsdev.yellow_time = value; LOGI("Set value %d to device tslights.", tslightsdev.yellow_time); device->set_tslightsdev(device, tslightsdev); } static jint tslights_getYellow_time(JNIEnv* env, jobject clazz, jint ptr) { tslights_device_t* device = (tslights_device_t*)ptr; if(!device) { LOGE("Device tslights is not open."); return 0; } device->get_tslightsdev(device, &tslightsdev); LOGI("Get value %d from device tslights.", tslightsdev.yellow_time); return tslightsdev.yellow_time; } static inline int tslights_device_open(const hw_module_t* module, struct tslights_device_t** device) { return module->methods->open(module, TSLIGHTS_HARDWARE_DEVICE_ID, (struct hw_device_t**)device); } static jint tslights_init(JNIEnv* env, jclass clazz) { tslights_module_t* module; tslights_device_t* device; LOGI("Initializing HAL stub tslights......"); if(hw_get_module(TSLIGHTS_HARDWARE_MODULE_ID, (const struct hw_module_t**)&module) == 0) { LOGI("Device tslights found."); if(tslights_device_open(&(module->common), &device) == 0) { LOGI("Device tslights is open."); return (jint)device; } LOGE("Failed to open device tslights."); return 0; } LOGE("Failed to get HAL stub tslights."); return 0; } static const JNINativeMethod method_table[] = { {"init_native", "()I", (void*)tslights_init}, {"setRed_init_native", "(II)V", (void*)tslights_setRed_init}, {"getRed_init_native", "(I)I", (void*)tslights_getRed_init}, {"setRed_time_native", "(II)V", (void*)tslights_setRed_time}, {"getRed_time_native", "(I)I", (void*)tslights_getRed_time}, {"setGreen_init_native", "(II)V", (void*)tslights_setGreen_init}, {"getGreen_init_native", "(I)I", (void*)tslights_getGreen_init}, {"setGreen_time_native", "(II)V", (void*)tslights_setGreen_time}, {"getGreen_time_native", "(I)I", (void*)tslights_getGreen_time}, {"setYellow_init_native", "(II)V", (void*)tslights_setYellow_init}, {"getYellow_init_native", "(I)I", (void*)tslights_getYellow_init}, {"setYellow_time_native", "(II)V", (void*)tslights_setYellow_time}, {"getYellow_time_native", "(I)I", (void*)tslights_getYellow_time}, }; int register_android_server_TslightsService(JNIEnv *env) { return jniRegisterNativeMethods(env, "com/android/server/TslightsService", method_table, NELEM(method_table)); } };
Slog.i(TAG, “Tslights Service”);
ServiceManager.addService(“tslights”, new TslightsService());
} catch (Throwable e) {
Slog.e(TAG, “Failure starting Tslights Service”, e);
}
package clear.zhang.tslights; import android.app.Activity; import android.os.ServiceManager; import android.os.Bundle; import android.os.ITslightsService; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.os.Handler; import android.widget.LinearLayout; import android.widget.ImageView; import android.os.Message; import android.os.CountDownTimer; public class Tslights extends Activity { private final static String LOG_TAG = "clear.zhang.tslights.TslightsActivity"; private ITslightsService tslightsService = null; private TextView viewById=null; int textnum = 60; private ImageView imageViewred; private ImageView imageViewgreen; private ImageView imageViewyellow; Handler handler = new Handler(); int i=0; int red_time=8; int red_init =1 ; int green_time=10; int green_init =1; int yellow_time=3; int yellow_init =1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tslightsService = ITslightsService.Stub.asInterface( ServiceManager.getService("tslights")); viewById = (TextView)findViewById(R.id.tv_count); imageViewred=(ImageView)findViewById(R.id.red); imageViewgreen=(ImageView)findViewById(R.id.green); imageViewyellow=(ImageView)findViewById(R.id.yellow); viewById.setText(String.valueOf(textnum)); imageViewred.setImageDrawable(getResources().getDrawable(R.drawable.pred)); imageViewgreen.setImageDrawable(getResources().getDrawable(R.drawable.pgreen)); imageViewyellow.setImageDrawable(getResources().getDrawable(R.drawable.pyellow)); try { red_init=tslightsService.getRed_init(); red_time=tslightsService.getRed_time(); green_init=tslightsService.getGreen_init(); green_time=tslightsService.getGreen_time(); yellow_init=tslightsService.getYellow_init(); yellow_time=tslightsService.getYellow_time(); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while reading value from freg service."); } Log.i(LOG_TAG, "Tslights Activity Created"); handler.postDelayed(runnable,1000); } Runnable runnable = new Runnable() { @Override public void run() { i++; if (i >= 0 && i <= green_time&&green_init==1) { imageViewred.setVisibility(View.INVISIBLE); imageViewgreen.setVisibility(View.VISIBLE); imageViewyellow.setVisibility(View.INVISIBLE); CountDownTimer timer1=new CountDownTimer(green_time*1000+500, 1000) { public void onTick(long millisUntilFinished) { int a= (int) (millisUntilFinished/1000); viewById.setText(String.valueOf(a)); //viewById.setText(String.valueOf(millisUntilFinished / 1000)); } public void onFinish() { //LogUtil.i(TAG, "done!"); } }.start(); try { green_init=0; tslightsService.setGreen_init(green_init); yellow_init=1; tslightsService.setYellow_init(yellow_init); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while reading value from freg service."); } } else if (i >= green_time+1 && i <= green_time+yellow_time&&yellow_init==1) { imageViewred.setVisibility(View.INVISIBLE); imageViewgreen.setVisibility(View.INVISIBLE); imageViewyellow.setVisibility(View.VISIBLE); CountDownTimer timer2=new CountDownTimer(yellow_time*1000+500, 1000) { public void onTick(long millisUntilFinished) { int a= (int) (millisUntilFinished/1000); viewById.setText(String.valueOf(a)); } public void onFinish() { //LogUtil.i(TAG, "done!"); } }.start(); try { yellow_init=0; tslightsService.setYellow_init(yellow_init); red_init=1; tslightsService.setRed_init(red_init); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while reading value from freg service."); } } else if (i >= green_time+yellow_time+1 && i <= red_time+green_time+yellow_time&&red_init==1) { imageViewred.setVisibility(View.VISIBLE); imageViewgreen.setVisibility(View.INVISIBLE); imageViewyellow.setVisibility(View.INVISIBLE); CountDownTimer timer3=new CountDownTimer(red_time*1000+500, 1000) { public void onTick(long millisUntilFinished) { int a= (int) (millisUntilFinished/1000); viewById.setText(String.valueOf(a)); } public void onFinish() { //LogUtil.i(TAG, "done!"); } }.start(); try { red_init=0; tslightsService.setRed_init(red_init); green_init=1; tslightsService.setGreen_init(green_init); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while reading value from freg service."); } } else if (i > red_time+green_time+yellow_time) { i = 0; } handler.postDelayed(this, 1000); } }; }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/green" android:layout_width="50dp" android:layout_height="50dp" app:src="@drawable/pgreen" tools:visibility="invisible" /> <ImageView android:id="@+id/red" android:layout_width="50dp" android:layout_height="50dp" android:visibility="invisible" app:src="@drawable/pred" /> <ImageView android:id="@+id/yellow" android:layout_width="50dp" android:layout_height="50dp" android:visibility="invisible" app:src="@drawable/pyellow" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_count" android:textSize="30sp" > </TextView> </LinearLayout> </LinearLayout>
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算