2011-04-18 72 views
0

我正在嘗試使用ConnectivityManager的setMobileDataEnabled方法,並且出於某種原因,我在我的模擬器和實際設備上得到了不同的結果。 在我的設備(Nexus One的,運行的CyanogenMod 7.0)來調用這個函數,並設置移動數據設置正確時,它工作完全正常(後獲得這一功能使用反射):setMobileDataEnabled在模擬器上不起作用?

ConnectivityManager connService = (ConnectivityManager) p_context.getSystemService(Context.CONNECTIVITY_SERVICE); 

if (null != connService) 
{ 
    try 
    { 
     Method setMobileDataEnabledMethod = connService.getClass().getDeclaredMethod("setMobileDataEnabled", boolean.class); 

     if (null != setMobileDataEnabledMethod) 
     { 
      setMobileDataEnabledMethod.invoke(connService, true); 
     } 
    } 
    catch (Exception ex) 
    { 
     // Error 
    } 
} 

的問題是,當我「M使用相同代碼在模擬器上,我發現了以下異常:

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) 
文檔中

無處(我能找到...)它指出‘WRITE_SECURE_SETTINGS’許可,才能進行這個功能,我想知道這是不是一個呃lator問題或在我的設備上運行的事實只是一些奇怪的重合?

+0

在清單上添加WRITE_SECURE_SETTING權限。它將解決 – 2013-01-22 07:15:18

回答

1

這是一個安全設置,您需要是具有系統權限的應用程序才能設置此值。爲此,您需要使用供應商發佈密鑰簽署您的應用程序,考慮到您擁有如此多版本的供應商版本的android,我不確定它是否是可擴展的解決方案。

相反,您可以嘗試提示用戶啓動該屏幕並設置值。

+0

感謝您的答案,但我不明白它怎麼可能在我的設備上工作,並在模擬器上失敗... – Muzikant 2011-04-19 16:52:37

+0

如果可能嘗試在不同的設備上,我認爲你會得到相同的錯誤。你已經簽署了你的申請的關鍵是什麼? – Naresh 2011-04-20 07:13:36

+0

我用我創建的常規密鑰對它進行了簽名,所以沒有系統密鑰或類似的東西 – Muzikant 2011-04-25 04:11:42

相關問題