android.os.ServiceManager.getService("sensor_privacy").setToggleSensorPrivacy(0, 0, 1, true);
// 设置指定用户麦克风传感器使用权限
/*
(userId, source, sensor, true);
 *   userId:一般为 0
 *   source:来源,填0即可
 *   sensor:1=麦克风、2=摄像头
 *   enable:true=启用隐私保护,关闭传感器
 *    false = 开启传感器
 */

#MVEL表达式 #Javascript
android.os.ServiceManager.getService("sensor_privacy").setSensorPrivacy(true);
// 设置禁用全局传感器 true=关闭传感器,false=开启所有
// ShortX已存在该动作 

#MVEL表达式 #Javascript
android.os.ServiceManager.getService("sensor_privacy").isSensorPrivacyEnabled();       
// 全局传感器隐私是否开启,ShortX 已存在该条件

#MVEL表达式 #Javascript
android.os.ServiceManager.getService("sensor_privacy").showSensorUseDialog(2);
/*
在关闭对应传感器的前提,手动弹一次“解锁传感器开关”的确认对话框
 1 - 麦克风使用权限
 2 - 摄像头使用权限
*/

#MVEL表达式 #Javascript
android.os.ServiceManager.getService("sensor_privacy").isToggleSensorPrivacyEnabled(1, 2);
// 获取摄像头传感器是否禁用
/*
   (1, 传感器类型1/2)
 1 - 麦克风使用权限
 2 - 摄像头使用权限
 */

#MVEL表达式 #Javascript
android.os.ServiceManager.getService("sensor_privacy").supportsSensorToggle(1, 2);     
// 设备是否支持摄像头硬件开关
/*
   (1, 传感器类型1/2)
 1 - 麦克风使用权限
 2 - 摄像头使用权限
*/

#MVEL表达式 #Javascript
com.android.internal.telephony.ITelephony.Stub.asInterface(android.os.ServiceManager.getService("phone")).getDataNetworkType("android", "") == 20;
// 判断当前SIM卡网络类型是否为5G

#MVEL表达式 #Javascript
/*
0 - 没插卡
1 - GPRS (2G)
2 - EDGE (2G)
3 - UMTS (3G)
4 - CDMA (3G)
5 - EVDO_0 (3G)
6 - EVDO_A (3G)
7 - EVDO_B (3G)
8 - HSDPA (3G)
9 - HSUPA (3G)
10 - HSPA (3G)
11 - IDEN (2G)
12 - LTE (4G)
13 - LTE_CA (4G+)
14 - HSPAP (3G)
15 - GSM (2G)
16 - TD_SCDMA (3G)
17 - IWLAN (Wi-Fi)
20 - NR (5G)
*/

#网络类型
// 获取活动订阅信息
subscriptionManager = android.telephony.SubscriptionManager.from(context);
subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();

// 检查订阅信息是否为空
if (subscriptionInfoList == "[]") {
    false;
} else {
    // 获取卡一 的订阅ID
    subId = subscriptionInfoList.get(0).getSubscriptionId();

    // 获取网络类型
    telephonyManager = com.android.internal.telephony.ITelephony.Stub.asInterface(android.os.ServiceManager.getService("phone"));
    telephonyManager.getNetworkTypeForSubscriber(subId, "android", "");
}
 //获取卡一的网络类型

#MVEL表达式 #Javascript
com.android.internal.telephony.ITelephony.Stub.asInterface(android.os.ServiceManager.getService("phone")).getDataNetworkType("android", "");
// 获取当前SIM卡的网络类型

#MVEL表达式 #Javascript
InputDevice = android.view.InputDevice;

inputManager = android.os.ServiceManager.getService("input");

deviceIds = inputManager.getInputDeviceIds();

touchDeviceId = -1;

for (i = 0; i < deviceIds.length; i++) {
    id = deviceIds[i];
    sources = inputManager.getInputDevice(id).getSources();
    if ((sources & InputDevice.SOURCE_TOUCHSCREEN) == InputDevice.SOURCE_TOUCHSCREEN) {
        touchDeviceId = id;
    }
}

inputManager.enableInputDevice(touchDeviceId);
// 设置启用屏幕触摸

#MVEL表达式 #Javascript
InputDevice = android.view.InputDevice;

inputManager = android.os.ServiceManager.getService("input");

deviceIds = inputManager.getInputDeviceIds();

touchDeviceId = -1;

for (i = 0; i < deviceIds.length; i++) {
    id = deviceIds[i];
    sources = inputManager.getInputDevice(id).getSources();
    if ((sources & InputDevice.SOURCE_TOUCHSCREEN) == InputDevice.SOURCE_TOUCHSCREEN) {
        touchDeviceId = id;
    }
}

inputManager.disableInputDevice(touchDeviceId);
// 禁用触摸设备

#MVEL表达式 #Javascript
android.nfc.INfcAdapter.Stub.asInterface(android.os.ServiceManager.getService("nfc")).getState() == 3;
// 判断NFC是否开启

#MVEL表达式 #Javascript
// 只对与手机分辨率相同的显示设备生效,可避免导致全部显示设备同时关闭屏幕电源
Build = android.os.Build;
IBinder = android.os.IBinder;
Parcel = android.os.Parcel;
ServiceManager = android.os.ServiceManager;
SurfaceControl = android.view.SurfaceControl;
Context = android.content.Context;
DisplayMetrics = android.util.DisplayMetrics;

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

// 获取 DisplayManager 服务
displayManager = context.getSystemService("display");
// 获取手机的分辨率
metrics = new DisplayMetrics();
context.getSystemService(Context.WINDOW_SERVICE).getDefaultDisplay().getMetrics(metrics);
phoneWidth = metrics.widthPixels;
phoneHeight = metrics.heightPixels;

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();

        // 获取每个显示器的分辨率
        display = displayManager.getDisplay(i);
        display.getMetrics(metrics);
        displayWidth = metrics.widthPixels;
        displayHeight = metrics.heightPixels;

        // 只有当显示器分辨率与手机屏幕相同,才设置电源模式
        if (displayWidth == phoneWidth && displayHeight == phoneHeight) {
            // 获取显示器的 Token
            parcelData = Parcel.obtain();
            parcelReply = Parcel.obtain();
            parcelData.writeInterfaceToken("android.gui.ISurfaceComposer");
            parcelData.writeLong(displayIds[i]);
            surfaceFlingerService.transact(IBinder.FIRST_CALL_TRANSACTION + 6, parcelData, parcelReply, 0);
            parcelReply.readException();
            displayToken = parcelReply.readStrongBinder();
            parcelData.recycle();
            parcelReply.recycle();

            // 设置电源模式(0=强制息屏,2=开启电源模式)
            SurfaceControl.setDisplayPowerMode(displayToken, displayMode);
        } else {
            // 如果分辨率不匹配,跳过该显示器,继续遍历下一个显示器
            continue;
        }
    }
}
// 只对与手机分辨率相同的显示设备生效,可避免导致全部显示设备同时关闭屏幕电源

#MVEL表达式 #Javascript
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
context.getSystemService("statusbar").disable(0);
//设置显示状态栏所有内容

#MVEL表达式 #Javascript
statusbar = context.getSystemService("statusbar");
// 设置禁用标志(禁用通知图标、系统信息、时钟)
statusbar.disable(statusbar.DISABLE_NOTIFICATION_ICONS | statusbar.DISABLE_SYSTEM_INFO | statusbar.DISABLE_CLOCK);
// 设置隐藏状态栏基本内容显示
/*
禁用后台多任务界面
DISABLE_RECENT
禁用导航栏
DISABLE_NAVIGATION
全家桶(禁用所有能禁用的组件)(慎用)
DISABLE_MASK
禁用下拉状态栏(个别系统恢复下拉状态栏,执行恢复命令后需锁屏一次)
DISABLE_EXPAND

详情查看https://blog.csdn.net/qq_45146250/article/details/131088228
*/

#MVEL表达式 #Javascript
发一些我之前在官方群组发过的命令吧,重构后同时兼容两种语法,且代码更加简洁
android.os.ServiceManager.getService("wifi").getConnectionInfo("android", null);
// 获取当前WiFi 全部信息
// 我就不一个一个弄了,有些我自己也不需要

#MVEL表达式 #Javascript
ip = android.os.ServiceManager.getService("wifi").getConnectionInfo("android", null).getIpAddress();
(ip & 0xff) + "." + ((ip >> 8) & 0xff) + "." +
            ((ip >> 16) & 0xff) + "." + ((ip >> 24) & 0xff);
// 获取当前WiFi IP

#MVEL表达式 #Javascript
Back to Top