在具有root访问权限的Android L上禁用/启用移动数据

Nac*_*ive 12 android android-5.0-lollipop

我正在编写一个小应用程序,只有我会使用,我想在root的android 4.5设备上实际启用/禁用我的移动数据(我正在为Nexus 4运行自定义Android L).

我已经找了一会儿,我找到了反射的方法,直到android 4.3.我也看过这个帖子中的方法在Android 4.4.2上以编程方式切换移动数据,但这需要cyanogenmod.

从我在互联网上找到的内容来看,这对于非root应用来说是不可能的,但我的问题是:

有什么我可以用我的root权限来完成这个吗?

Slv*_*v3r 10

我在互联网上创造了这种方法; 它在rooted android 5.0.1 上工作正常基本上你必须传递true,如果你想要启用连接,否则返回false,以及你的应用程序的上下文.

private final static String COMMAND_L_ON = "svc data enable\n ";
private final static String COMMAND_L_OFF = "svc data disable\n ";
private final static String COMMAND_SU = "su";

public static void setConnection(boolean enable,Context context){

    String command;
    if(enable)
        command = COMMAND_L_ON;
    else
        command = COMMAND_L_OFF;        

    try{
        Process su = Runtime.getRuntime().exec(COMMAND_SU);
        DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

        outputStream.writeBytes(command);
        outputStream.flush();

        outputStream.writeBytes("exit\n");
        outputStream.flush();
        try {
            su.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        outputStream.close();
    }catch(IOException e){
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

请报告某些设备是否存在问题.

编辑:现在也兼容android 5.1 Credit


nan*_*esh 3

用这个

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Method methodSet = tm.class.getDeclaredMethod( "setDataEnabled", boolean.class);
methodSet.invoke(tm, true); 
Run Code Online (Sandbox Code Playgroud)

编辑:这需要权限MODIFY_PHONE_STATE,这是系统或签名级别权​​限。

理想情况下,您可以使用此代码创建一个可运行的 jar 文件并使用

export CLASSPATH=<jar path>
exec app_process <jar-dir-path> your.package.name.classname "$@"
Run Code Online (Sandbox Code Playgroud)

来自su外壳。

  • @nandeesh:简单地将您的应用程序移动到“/system/app”目录并不会神奇地使您的应用程序成为系统应用程序。您仍然需要使用 Android 平台证书对您的应用程序进行签名,并使用适当的指令配置“AndroidManifest.xml”,以便该应用程序作为系统应用程序运行。我怀疑你的上述回答是否有效,更不用说从赏金中获得 25 点声誉了。 (3认同)