/*
指定用户指定应用传感器管理
支持禁用、解除、查看,重置
*/
ServiceManager = android.os.ServiceManager;
ParcelFileDescriptor = android.os.ParcelFileDescriptor;

function runSensorCmd(args, userId) {

    svc = ServiceManager.getService("sensorservice");

    pin  = ParcelFileDescriptor.createPipe();
    pout = ParcelFileDescriptor.createPipe();
    perr = ParcelFileDescriptor.createPipe();

    pin[1].close();

    // 如果有指定用户,添加 --user 参数
    if (userId != undefined && userId != null) {
        args.push("--user");
        args.push(String(userId));
    }

    svc.shellCommand(
        pin[0].getFileDescriptor(),
        pout[1].getFileDescriptor(),
        perr[1].getFileDescriptor(),
        args,
        null,
        new android.os.ResultReceiver(null)
    );

    pout[1].close();
    perr[1].close();

    function read(p){
        s = new android.os.ParcelFileDescriptor.AutoCloseInputStream(p[0]);
        r = "";
        b = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
        n ="";
        while((n = s.read(b)) > 0){
            r += new java.lang.String(b, 0, n, "UTF-8");
        }
        return r;
    }

    result = read(pout) + read(perr);
    result = result.trim();

    if (args[0] == "get-uid-state") {
        if (result.includes("idle")) return true;
        if (result.includes("active")) return false;
        return false;

    }

    return result;
}

// 1) 禁用(设置为 idle,相当于限制传感器)
// runSensorCmd(["set-uid-state", "包名", "idle"], 0);

// 2) 恢复 active(取消限制)
// runSensorCmd(["set-uid-state", "com.liuzh.deviceinfo", "active"], 0);

// 3) 查看状态
// true 已禁用 false 未禁用
runSensorCmd(["get-uid-state", "com.liuzh.deviceinfo"], 0);

// 4) 恢复默认(清除 override)
// runSensorCmd(["reset-uid-state", "包名"], 0);

// 该接口不会禁用摄像头和麦克风,下载类似设备信息APP测试效果
// Android 11-16已测试成功,其他版本未知

#Javascript
 
 
Back to Top