无法在 Android 应用程序上更改“/sys/class/power_supply/battery/input_suspend”的值

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

我正在尝试制作可以停止电池充电的 Android 应用程序。

我的Android设备运行Android 12,该应用程序的build.gradle中compileSdk的值为32。
当然,我的 Android 设备已 root。

我遵循了这个问题并通过运行“setenforce 0”命令禁用了SELinux。

我发现我可以通过将“/sys/class/power_supply/battery/input_suspend”的值从0更改为1来停止电池充电。

我已通过在连接 Android 设备的 PC 上运行以下命令来确认我确实可以通过这样做来停止电池充电:

adb shell su
echo 1 > /sys/class/power_supply/battery/input_suspend

这效果很好。所以我开始创建使用这种方法的应用程序。

本App的MainActivity.java:

package com.example.chargedisabler;

import static android.content.ContentValues.TAG;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            Runtime.getRuntime().exec("su -c \"echo 1 > /sys/class/power_supply/battery/input_suspend\"");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这不起作用。即使授予Root权限,充电也没有停止。

我改变了方法,更改了MainActivity.java如下:

package com.example.chargedisabler;

import static android.content.ContentValues.TAG;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.io.IOException;
import java.io.OutputStream;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            Process p = Runtime.getRuntime().exec("su");
            OutputStream OStrm = p.getOutputStream();
            OStrm.write(("echo 1 > /sys/class/power_supply/battery/input_suspend\n").getBytes("UTF-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这也不起作用。

接下来,在连接Android设备的PC上,我尝试以与以前不同的方式停止电池充电:

adb shell su -c "echo 1 > /sys/class/power_supply/battery/input_suspend"

奇怪的是,该命令输出以下内容:

/system/bin/sh: can't create /sys/class/power_supply/battery/input_suspend: Permission denied

当我尝试以类似的方式读取内容时,不知怎的,文件可以成功读取:

adb shell su -c "cat /sys/class/power_supply/battery/input_suspend"

该命令输出“0”。

似乎除非以某种正确的方式执行该命令,否则该文件将被保密以进行写入。

如何从应用程序内更改“/sys/class/power_supply/battery/input_suspend”的值?

或者是否有适用于任何设备的更好的停止充电方法?

java android root
1个回答
0
投票

您可以在我的 GitHub 帐户上找到 MyRootModule.kt 文件。我为 React Native 项目创建了它,但您也可以在 Android Studio 中使用它。您的 su -c ... 命令有时不起作用,这是正常的。

首先获得超级用户访问权限,然后执行不带“su -c”的命令 https://github.com/umutsar/ReactNativeSuperuser

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