Android setMobileDataEnabled在emulator上不工作?

Android setMobileDataEnabled在emulator上不工作?,android,android-emulator,Android,Android Emulator,我尝试使用ConnectionManager的setMobileDataEnabled方法,由于某些原因,我在模拟器和实际设备上得到了不同的结果。 在我的设备(Nexus One,运行CyanogenMod 7.0)上,当调用此函数并正确设置移动数据设置时(使用反射进入此函数后),它工作正常: 问题是,当我在emulator上使用相同的代码时,会出现以下异常: java.lang.reflect.InvocationTargetException at android.net.Conne

我尝试使用ConnectionManager的setMobileDataEnabled方法,由于某些原因,我在模拟器和实际设备上得到了不同的结果。 在我的设备(Nexus One,运行CyanogenMod 7.0)上,当调用此函数并正确设置移动数据设置时(使用反射进入此函数后),它工作正常:

问题是,当我在emulator上使用相同的代码时,会出现以下异常:

java.lang.reflect.InvocationTargetException
    at android.net.ConnectivityManager.setMobileDataEnabled(ConnectivityManager.java:379)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
Caused by: java.lang.SecurityException: Permission denial: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS
    at android.os.Parcel.readException(Parcel.java:1247)
    at android.os.Parcel.readException(Parcel.java:1235)
    at android.net.IConnectivityManager$Stub$Proxy.setMobileDataEnabled(IConnectivityManager.java:540)

文档中没有任何地方(我可以找到…)说明此功能需要“写入安全设置”权限,我想知道这是否只是一个模拟器问题,或者在我的设备上它工作只是一个奇怪的巧合?

这是一个安全设置,您需要是具有系统权限的应用程序才能设置此值。为此,您需要使用供应商发布密钥对应用程序进行签名,考虑到您有这么多版本的android供应商版本,我不确定这是否是一个可扩展的解决方案


相反,您可以尝试提示用户启动该屏幕并设置值。

谢谢您的回答,但我不明白它如何在我的设备上工作,并且在模拟器上失败……如果可能,请在其他设备上尝试,我想您会遇到相同的错误。您签署应用程序时使用的密钥是什么?我使用我创建的常规密钥进行了签名,因此没有系统密钥或类似的内容。请在清单上添加“写入”安全设置权限。它会解决的
java.lang.reflect.InvocationTargetException
    at android.net.ConnectivityManager.setMobileDataEnabled(ConnectivityManager.java:379)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
Caused by: java.lang.SecurityException: Permission denial: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS
    at android.os.Parcel.readException(Parcel.java:1247)
    at android.os.Parcel.readException(Parcel.java:1235)
    at android.net.IConnectivityManager$Stub$Proxy.setMobileDataEnabled(IConnectivityManager.java:540)