我问了这个问题,但我没有收到答案。
我使用以下代码打开移动数据(3G)。
private static void setMobileDataEnabled(Context context, boolean enabled){
try{
ConnectivityManager conman = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
Method setMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(conman, enabled);
}catch(NoSuchMethodException e){e.printStackTrace();}
catch(InvocationTargetException e){e.printStackTrace();}
catch(IllegalAccessException e){e.printStackTrace();}
}
我称之为:
setMobileDataEnabled(getBaseContext(), true/false);
正确启用/禁用移动数据,但此代码在双SIM卡设备上无法正常运行。我在三星Dual-SIM上的摩托罗拉Razr D1,D3上进行了测试(现在不记得了)但是这段代码不起作用。一切正常,应用程序不会崩溃。
我尝试了“getApplicationContext()”和“this”,而不是“getBaseContext()”,但没有改变。
我了解到Android并非专为双芯片设备设计,这可能是一个问题,因为我无法定位任何SIM卡,因此我无法找到任何技巧或其他任何“修复”代码,我是对的?
如何在双芯片设备上打开/关闭移动数据?我看了一下源代码,setMobileDataEnabled是“public”,应该不能访问它吗?
我也找到了IConnectivityManager类,但它不是java扩展,我认为它是.aidl或者什么(不记得了),它可以有用吗?
我不知道该怎么做,我需要帮助。
抱歉我的英文。
感谢。
答案 0 :(得分:1)
尝试此链接Enable/Disable Mobile Data (GPRS) using code
始终建议使用通用方法。 HOwever,您的代码可能只适用于API 8 / API 10.您是否在android清单文件中添加了权限?检查链接问题的第一个答案并执行。
如果不起作用,请检查与您的代码相同的第二个。但是,我将推荐第一种方法,因为这样,您就不必单独为每个API编写代码。另外正如@tdevinda所说,代码可能因设备到设备,单一SIM卡到多线程,gsm-cdma-wcdma版本,API级别和设备制造商而异。我希望它有所帮助:)
编辑:目前还没有Android开发者页面的官方帮助。 HOwever,您可以提出申请。我也无法找到任何解决方案。双SIM卡问题没有解决。
编辑2:检查图片。