Build = android.os.Build;
IBinder = android.os.IBinder;
Parcel = android.os.Parcel;
ServiceManager = android.os.ServiceManager;
SurfaceControl = android.view.SurfaceControl;

displayMode = 0; // 直接设置电源模式  2: 开启, 0: 关闭

if (Build.VERSION.SDK_INT < 34) { // Android 14 之前的版本
    // 获取 SurfaceControl 类(旧版本需要实例化)
    surfaceControl = new SurfaceControl();

    // 根据 Android 版本获取显示器 Token 方法
    displayToken = (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) ?
        surfaceControl.getBuiltInDisplay(0) : SurfaceControl.getInternalDisplayToken();

    // 直接调用 SurfaceControl 的方法,设置电源模式
    SurfaceControl.setDisplayPowerMode(displayToken, displayMode);

} else { // Android 14 及以上版本
    // 获取 SurfaceFlinger 服务(AIDL 方式)
    surfaceFlingerService = ServiceManager.getService("SurfaceFlingerAIDL");

    // 获取显示器 ID 列表
    parcelData = Parcel.obtain();
    parcelReply = Parcel.obtain();
    parcelData.writeInterfaceToken("android.gui.ISurfaceComposer");
    surfaceFlingerService.transact(IBinder.FIRST_CALL_TRANSACTION + 5, parcelData, parcelReply, 0);
    parcelReply.readException();
    displayCount = parcelReply.readInt();

    // 创建 long[] 数组存储显示器 ID
    displayIds = java.lang.reflect.Array.newInstance(java.lang.Long.TYPE, displayCount);

    // 读取显示器 ID
    for (var i = 0; i < displayCount; i++) {
        displayIds[i] = parcelReply.readLong();
    }
    parcelData.recycle();
    parcelReply.recycle();

    // 遍历每个显示器,设置电源模式
    for (var i = 0; i < displayIds.length; i++) {
        displayId = displayIds[i];

        // 获取单个显示器的 Token
        parcelData = Parcel.obtain();
        parcelReply = Parcel.obtain();
        parcelData.writeInterfaceToken("android.gui.ISurfaceComposer");
        parcelData.writeLong(displayId);
        surfaceFlingerService.transact(IBinder.FIRST_CALL_TRANSACTION + 6, parcelData, parcelReply, 0);
        parcelReply.readException();
        displayToken = parcelReply.readStrongBinder();
        parcelData.recycle();
        parcelReply.recycle();

        // 直接调用 SurfaceControl 的方法,设置电源模式(0=强制息屏,2=开启电源模式)
        SurfaceControl.setDisplayPowerMode(displayToken, displayMode);
    }
}
// Extinguish 息屏挂机 息屏运行 听剧模式 仅关屏 息屏不锁屏 息屏不锁屏 游戏挂机 开屏伪装FakeSceen

#MVEL表达式 #Javascript
 
 
Back to Top