我正在使用闭源摄像头 HAL 的设备上开发自定义版本的 Android,因此我不得不添加一个摄像头包装器,这是一个 Android 加载的库,而不是供应商摄像头,因此错误和特性与供应商实施可以解决。我发现我需要改变应用程序之间的行为,因此在 Snapchat 中我不想实现某个参数,例如,如果我不设置环聊会崩溃。问题是 Android 不会告诉相机哪个应用程序正在使用它。我尝试了以下代码来查看我的 pid 是什么,但结果是“/system/bin/mediaserver”,这与我的想法并不完全一致。询问父 ID 更糟糕,它只返回 1。我所寻求的在 Android java 中是微不足道的,但我受限于 C 以及我可以在 Bionic 中找到的任何内容。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
之后
const static char * whiteList[] = {"com.android.camera2"};
const static int whiteListLen = 1;
const pid_t pid = getpid();
char plink[64];
char pname[64];
FILE *fptr;
snprintf(plink, sizeof(plink), "/proc/%i/cmdline", pid);
fptr = fopen(plink, "r");
if (fptr != NULL) {
ALOGD("Determining name of running PID %i", pid);
fscanf(fptr, "%s", pname);
ALOGD("Process is %s", pname);
for(int i = 0; i < whiteListLen; i++) {
if(strcmp(whiteList[i], pname) == 0) {
ALOGD("Camera opened by whitelisted app %s, enabling XXX.", pname);
XXX;
break;
}
}
} else {
ALOGD("Unable to open /proc/%i/cmdline", pid);
}
fclose(fptr);