telephonymanager连接到数据网络

时间:2018-07-22 18:17:57

标签: android

我的问题是关于Android Studio。我正在尝试实现以下方法:setNetworkSelectionModeManual 从telephonymanager库成功。 每当调用它时,应用程序就会崩溃。可能是允许的事情,将不胜感激。

代码:

public void startTimer(){
    countDownTimer = new CountDownTimer(timeLeftInMillisecond,1000) {
        @Override
        public void onTick(long l) {
            timeLeftInMillisecond = l;
            updateTimer();
        }

        @Override
        public void onFinish() {
            //switching to a different network by mpln
            boolean networkChanged = tm.setNetworkSelectionModeManual("USAW6", false);
                //restart timer
            countDownTimer.start();
        }
    }.start();

logcat中的错误:

07-22 18:14:04.941 27289-27310 / com.example.yakir.webbing_hlr E / OpenGLRenderer:allen debug liyu键:0 07-22 18:14:04.944 27289-27310 / com.example.yakir.webbing_hlr E / OpenGLRenderer:allen debug liyu键:34359738371 07-22 18:14:04.945 27289-27310 / com.example.yakir.webbing_hlr E / OpenGLRenderer:allen debug liyu键:240518168576 07月22日18:14:04.946 27289-27310 / com.example.yakir.webbing_hlr E / OpenGLRenderer:艾伦调试liyu键:68724719680 07-22 18:14:08.062 27289-27289 / com.example.yakir.webbing_hlr I / hwaps:JNI_OnLoad 07-22 18:14:08.110 27289-27310 / com.example.yakir.webbing_hlr E / OpenGLRenderer:allen debug liyu键:103084458052 07-22 18:14:18.107 27289-27289 / com.example.yakir.webbing_hlr E / AndroidRuntime:FATAL EXCEPTION:main     流程:com.example.yakir.webbing_hlr,PID:27289     java.lang.NoSuchMethodError:类Landroid / telephony / TelephonyManager中没有虚拟方法setNetworkSelectionModeManual(Ljava / lang / String; Z)Z或其超级类(“ android.telephony.TelephonyManager”的声明出现在/system/framework/framework.jar:classes2.dex中)         在com.example.yakir.webbing_hlr.MainActivity $ 2.onFinish(MainActivity.java:74)         在android.os.CountDownTimer $ 1.handleMessage(CountDownTimer.java:127)         在android.os.Handler.dispatchMessage(Handler.java:105)         在android.os.Looper.loop(Looper.java:156)         在android.app.ActivityThread.main(ActivityThread.java:6523)         在java.lang.reflect.Method.invoke(本机方法)         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:942)         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 07-22 18:14:18.158 27289-27289 / com.example.yakir.webbing_hlr I / Process:正在发送信号。 PID:27289 SIG:9

1 个答案:

答案 0 :(得分:1)

问题在于,由于此方法调用setNetworkSelectionModeManual(),因此该应用程序仅可在Android 9或更高版本的设备[Android P:API:28]上运行

setNetworkSelectionModeManual(Ljava/lang/String;Z)Z in class 
Landroid/telephony/TelephonyManager; or its super classes (declaration of 
'android.telephony.TelephonyManager' appears in 
/system/framework/framework.jar:classes2.dex) at 
com.example.yakir.webbing_hlr.MainActivity$2.onFinish(MainActivity.java:74) at 

setNetworkSelectionModeManual方法仅在API级别28 [Android P / Android 9]中添加

  在 API级别28 公共布尔中添加了

setNetworkSelectionModeManual   setNetworkSelectionModeManual(String operatorNumeric,                   booleanpersistentSelection)要求无线电连接到输入网络并将选择模式更改为手动。

     

需要权限:MODIFY_PHONE_STATE或调用应用程序具有   运营商特权(请参见hasCarrierPrivileges())。

Android Version History

我看不到所有相关代码,但是您的活动中有一些东西在调用该方法或执行与电话相关的任务,导致该方法被调用。

解决方案:

  • 请勿调用该方法
  • 将gradle文件中的最低API设置为28,以防止旧设备运行该应用
  • 在Android P模拟器上运行您的应用
  • 有时还会添加新的API兼容性库
  • 仅在API级别足够高的情况下运行代码

示例:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // or 28
   // Call the method
} else {
   // Call different methods, possibly deprecated ones that do the same thing
}