Rooted Device:切换移动网络访问不起作用

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

我刚刚扎根我的设备(已验证:),并安装了Linage 16(Android 9)。

之所以这样做,是因为我需要禁用移动网络,然后重新启用它才能从移动服务提供商那里获得新的新IP地址。所有这些都必须在应用本身内部自动完成。因此,对于我的特殊情况,手动断开连接和重新连接不是解决方案。

因此,我进行了一些研究,例如,我在这里发现了应该启用移动网络切换的功能:https://stackoverflow.com/a/31488730/1020704

这说明了如何请求root特权:https://stackoverflow.com/a/31488730/1020704

并且这里说明了如何正确设置Manifest.xml:https://stackoverflow.com/a/31488730/1020704

所以,我得到的是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.example.app"
            xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" tools:ignore="ProtectedPermissions"/>


<application....

并且在我的代码中,我执行以下操作:

 public void toggleMobileNetwork(boolean mobileDataEnabled) {
    try {
        Process root = Runtime.getRuntime().exec("su");
        TelephonyManager telephonyService = (TelephonyManager) getSystemService(this.TELEPHONY_SERVICE);
        Method setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class);
        if (null != setMobileDataEnabledMethod) {
            setMobileDataEnabledMethod.invoke(telephonyService, mobileDataEnabled);
        }
    } catch (Exception ex) {
        ex.getCause().printStackTrace();
    }
}

执行此代码时,出现以下异常:

W/System.err: java.lang.SecurityException: setUserDataEnabled
W/System.err:     at android.os.Parcel.createException(Parcel.java:1950)
W/System.err:     at android.os.Parcel.readException(Parcel.java:1918)
W/System.err:     at android.os.Parcel.readException(Parcel.java:1868)
W/System.err:     at com.android.internal.telephony.ITelephony$Stub$Proxy.setUserDataEnabled(ITelephony.java:4631)
W/System.err:     at android.telephony.TelephonyManager.setDataEnabled(TelephonyManager.java:6453)
W/System.err:     at android.telephony.TelephonyManager.setDataEnabled(TelephonyManager.java:6430)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.example.app.MainActivity.toggleMobileNetwork(MainActivity.java:51)
W/System.err:     at com.example.app.MainActivity.disableMobileNetwork(MainActivity.java:41)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)

所以,有人知道我在这里做什么?

android
1个回答
0
投票

好吧,在进行了一些额外的研究之后,我在这里找到了一种类似SO的替代解决方案,它的工作原理很像魅力。

正是我需要的:https://stackoverflow.com/a/50912113/1020704

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