私は、クローズド ソース カメラ 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);