Gan*_*oid 7 android android-5.0-lollipop
我需要以编程方式打开/关闭移动数据.下面的代码不适用于5.x. 你能帮我么.提前致谢.
private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field connectivityManagerField = conmanClass.getDeclaredField("mService");
connectivityManagerField.setAccessible(true);
final Object connectivityManager = connectivityManagerField.get(conman);
final Class connectivityManagerClass = Class.forName(connectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(connectivityManager, enabled); }
Run Code Online (Sandbox Code Playgroud)
03-30 12:42:29.466:W/System.err(5966):java.lang.NoSuchMethodException:setMobileDataEnabled [boolean] 03-30 12:42:29.466:W/System.err(5966):at java.lang .Class.getMethod(Class.java:664)03-30 12:42:29.466:W/System.err(5966):at java.lang.Class.getDeclaredMethod(Class.java:626)
java.lang.NoSuchMethodException:setMobileDataEnabled [boolean] @在line下面.
final方法setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled",Boolean.TYPE);
似乎ConnectivityManager 中不再存在setMobileDataEnabled方法, 并且此功能已通过两种方法 getDataEnabled 和 setDataEnabled移至 TelephonyManager。
public void setMobileDataState(boolean mobileDataEnabled)
{
try
{
TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Method setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class);
if (null != setMobileDataEnabledMethod)
{
setMobileDataEnabledMethod.invoke(telephonyService, mobileDataEnabled);
}
}
catch (Exception ex)
{
Log.e(TAG, "Error setting mobile data state", ex);
}
}
public boolean getMobileDataState()
{
try
{
TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Method getMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("getDataEnabled");
if (null != getMobileDataEnabledMethod)
{
boolean mobileDataEnabled = (Boolean) getMobileDataEnabledMethod.invoke(telephonyService);
return mobileDataEnabled;
}
}
catch (Exception ex)
{
Log.e(TAG, "Error getting mobile data state", ex);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
执行代码时,您会收到一个 SecurityException,指出用户 10089 和当前进程都没有 android.permission.MODIFY_PHONE_STATE。
应该添加权限MODIFY_PHONE_STATE我从答案中得到了这个 谢谢 Muzikant
| 归档时间: |
|
| 查看次数: |
16737 次 |
| 最近记录: |