Android 开机动画判断是否存在图片文件代码解析
这段代码用于判断是否有开机图片文件,首先通过获取'ro.sw.publish_region'属性值,如果属性值为'cmcc_ln',表示该设备为中国移动设备,然后检查用户自定义的开机图片文件和系统内置的开机图片文件,如果有其中一个文件存在,并且文件格式正确,则返回true,表示存在开机图片文件;如果没有文件存在或者文件格式不正确,则返回false,表示不存在开机图片文件。
代码分析
bool BootAnimation::hasBootpic() {
char province_value[PROPERTY_VALUE_MAX];
property_get("ro.sw.publish_region", province_value, "");
if(strncmp("cmcc_ln", province_value, strlen("cmcc_ln")) == 0){
char fpath[256]={0};
if (access(USER_BOOTANIMATION_FILE, R_OK) == 0){
ALOGE("Failed to open iptv move zip '%s': %s",
USER_BOOTANIMATION_FILE, strerror(errno));
return false;
}
if (access(IPTV_ANIMATION_CONFIG_BASE IPTV_ANIMATION_PICTURE_FILE, R_OK) == 0 ) {
sprintf(fpath, "%s%s", IPTV_ANIMATION_CONFIG_BASE, IPTV_ANIMATION_PICTURE_FILE);
if (isAImageFile(fpath, NULL)) {
ALOGD("has %s", IPTV_ANIMATION_PICTURE_FILE);
return true;
} else {
ALOGD("invalid %s", IPTV_ANIMATION_PICTURE_FILE);
remove(fpath);
}
}
if (access(IPTV_ANIMATION_SYSTEM_BASE IPTV_ANIMATION_PICTURE_FILE, R_OK) == 0 ) {
sprintf(fpath, "%s%s", IPTV_ANIMATION_SYSTEM_BASE, IPTV_ANIMATION_PICTURE_FILE);
if (isAImageFile(fpath, NULL)) {
ALOGD("has %s", IPTV_ANIMATION_PICTURE_FILE);
return true;
} else {
ALOGD("invalid %s", IPTV_ANIMATION_PICTURE_FILE);
remove(fpath);
}
}
ALOGD("no %s", IPTV_ANIMATION_PICTURE_FILE);
}
return false;
}
- 获取设备属性: 代码首先通过
property_get()函数获取设备属性'ro.sw.publish_region'的值,并存储到province_value变量中。 - 判断设备类型: 代码使用
strncmp()函数比较province_value和字符串'cmcc_ln',如果相等,则表示设备为中国移动设备。 - 检查用户自定义开机图片: 代码使用
access()函数检查用户自定义开机图片文件USER_BOOTANIMATION_FILE是否存在,如果存在,则表示存在开机图片文件,返回true。 - 检查系统内置开机图片: 代码检查系统内置开机图片文件,分别为
IPTV_ANIMATION_CONFIG_BASE IPTV_ANIMATION_PICTURE_FILE和IPTV_ANIMATION_SYSTEM_BASE IPTV_ANIMATION_PICTURE_FILE,使用access()函数判断文件是否存在,如果存在,则使用isAImageFile()函数判断文件格式是否为图片格式,如果是图片格式,则表示存在开机图片文件,返回true;否则,表示不存在开机图片文件,返回false。
总结
这段代码通过获取设备属性值和检查文件是否存在及格式是否正确来判断是否有开机图片文件。如果代码返回true,则表示存在开机图片文件;如果代码返回false,则表示不存在开机图片文件。
原文地址: https://www.cveoy.top/t/topic/lkjZ 著作权归作者所有。请勿转载和采集!