如何判断C中的android是否启用了屏幕?

时间:2017-12-24 19:12:10

标签: android c get screen state

我正在使用C for Android开发一个守护进程,需要让设备的显示状态正常工作。 我尝试通过具有PIPE功能的shell命令获取它:

char state[8];
FILE *pipe = popen("dumpsys locationpolicy | /sbin/busybox grep mScreenOn", "re");
fscanf(pipe, "mScreenOn=%s", state);
pclose(pipe);
return (!strcmp(state, "true"));

dumpsys locationpolicy 是唯一适用于我的设备的服务查询并正确提供屏幕状态(所有其他变体不包含任何有关屏幕的信息),但是在第一个'状态后的每次尝试'包含损坏的数据(首先可能包含“true”或“false”,其他人看起来如此:“@ B”),虽然当我从adb shell或直接从终端模拟器尝试时,此命令可以正常工作。也许是因为我的程序使用pthread多线程,但它很重要,我无法摆脱它。

有没有办法直接通过Linux方式获取屏幕状态,还是不可能?

PS:即使我尝试将查询调用到Android并将其重定向到文件(通过system())然后直接从代码中读取它,它甚至不会创建我在shell代码中编写的任何文件......示例:

FILE *f;
char state[8];
system("dumpsys locationpolicy | /sbin/busybox grep mScreenOn >/tmp/.screen_state");
f = fopen("/tmp/.screen_state", "r");
fscanf(f, "mScreenOn=%s\n", state);
fclose(f);
return(!strcmp(state, "true"));

0 个答案:

没有答案