如何通过 ADB 关闭振动(在所有应用程序中)?

问题描述 投票:0回答:2

我正在使用

UiAutomator
创建测试,并且在应用程序中使用振动,但在测试中不需要它。

我正在这样做:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("adb shell cmd appops set <app package name> VIBRATE ignore")

但是这个命令对我不起作用,也许是因为振动来自通知。

android adb
2个回答
4
投票

您只需从提供给

adb shell
方法的字符串中删除
executeShellCommand
即可。工作声明将是:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("cmd appops set <app package name> VIBRATE ignore")

0
投票

许多应用程序忽略或绕过

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("cmd appops set <app package name> VIBRATE ignore")

应用内振动设置。

我创建了一个简单的脚本,并将其包含在 Magisk 模块中(需要 root 访问权限),该脚本检测哪个应用程序位于前台,如果它与列表中的“不需要的”应用程序之一匹配,则会在系统范围内禁用振动。否则,振动将重新启用。

#!/system/bin/sh
# Magisk service script

MODDIR=${0%/*}

# Function to disable vibration
disable_vibration() {
    stop vendor.vibrator-1-0
}

# Function to re-enable vibration
enable_vibration() {
    start vendor.vibrator-1-0
}

vibration_disabled=0


# Function to load app list from config.txt
load_app_list() {
    APP_LIST=$(cat "$MODDIR/config.txt" | grep -v '^#' | grep -v '^$') # Exclude comments and empty lines
}


# Monitoring loop
while true; do

    # Reload the app list in case it's modified
    load_app_list

    # Get the current foreground app
    foreground_app=$(dumpsys activity activities | grep mResumedActivity | awk '{print $4}' | cut -d '/' -f 1)

    # Check if the foreground app matches any app in the list
    match_found=0
    for app in $APP_LIST; do
        if [ "$foreground_app" == "$app" ]; then
            match_found=1
            break
        fi
    done

    # Toggle vibration based on app state
    if [ "$match_found" -eq 1 ]; then
        if [ "$vibration_disabled" -eq 0 ]; then
            disable_vibration
            vibration_disabled=1
        fi
    else
        if [ "$vibration_disabled" -eq 1 ]; then
            enable_vibration
            vibration_disabled=0
        fi
    fi

    # Sleep for 5 seconds before checking again
    sleep 5
done

该模块位于 https://github.com/johnvigl/disable_vibration

如果您只需要在系统范围内禁用振动,则包含以下内容的脚本

#!/system/bin/sh
stop vendor.vibrator-1-0

应该够了。

必须手动将其放入 .sh 可执行文件中

/data/adb/service.d/

重启后就会开始。

© www.soinside.com 2019 - 2024. All rights reserved.