android電池溫度報警
阿新 • • 發佈:2019-01-28
基於mtk平臺的電池溫度報警
基本思路:迴圈讀取裝置檔案,讀取到溫度值,傳送廣播給上層應用,廣播收到溫度值後UI提示。程式碼如下:
Android.mk檔案#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <cutils/properties.h> #include <android/log.h> #include <sys/ioctl.h> #include <errno.h> #include <stdlib.h> #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "battery_warning",__VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "battery_warning",__VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , "battery_warning",__VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN , "battery_warning",__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "battery_warning",__VA_ARGS__) #define MAX_CHAR 100 #define MAX_LENGTH 1024 #define CMD "ps -t | grep ActivityManager" #define FILE_NAME "/sys/devices/platform/mt-battery/BatteryNotify" #define INTENT "am broadcast -n com.mediatek.batterywarning/com.mediatek.batterywarning.BatteryWarningReceiver -a android.intent.action.BATTERY_WARNING --ei type " int systemServerStarted(const char *cmd) { LOGD("systemServerStarted: %s \n", cmd); int res = 0; char buf_ps[MAX_LENGTH]; char ps[MAX_LENGTH]={0}; FILE *ptr; strcpy(ps, cmd); if((ptr=popen(ps, "r")) != NULL) { while(fgets(buf_ps, MAX_LENGTH, ptr) != NULL) //通過ps命令查詢ActivityManager是否存在 { LOGD("cmd result: %s", buf_ps); if(strlen(buf_ps) > 0) { res = 1; break; } } pclose(ptr); ptr = NULL; } else { LOGE("popen error"); } return res; } void readType(char* buffer) { FILE * pFile; pFile = fopen(FILE_NAME, "r"); //開啟裝置檔案 if(pFile == NULL) { LOGE("error opening file"); return; } else { if(fgets(buffer, MAX_CHAR, pFile) == NULL) { LOGE("can not get the string from the file"); return; } } int type = atoi(buffer); //轉化為整形 if (type > 0 && systemServerStarted(CMD)) { LOGD("start activity by send intent to BatteryWarningReceiver, type = %s", buffer); char ps[MAX_LENGTH] = INTENT; strcat(ps,buffer); LOGD("os.system: %s", ps); system(ps); //傳送廣播附件電池溫度,給上層應用 } fclose(pFile); } int main(int argc, char **argv) { char *buffer = (char*) malloc(MAX_CHAR * sizeof(char)); while(1) { readType(buffer); //讀取裝置檔案中溫度值 sleep(10); } free(buffer); return 0; }
#--------------------------------- LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := batterywarning.c LOCAL_SHARED_LIBRARIES := libc libcutils LOCAL_MODULE := batterywarning LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) #----------------------------------------