2012-11-22 60 views
2

我用下面的代碼在奧得河來獲得設備的首選APN:如果代理設置修改我的WebRequest獲得首選的APN失敗,因爲4.2

if (mCursor != null) { 
      try { 
       if (mCursor.moveToFirst()) { 
        // String name = mCursor.getString(0); 
        String proxy = mCursor.getString(1); 
        String port = mCursor.getString(2); 
        if (proxy != null) { 
         if (!proxy.equals("")) { 
          HttpHost proxys = new HttpHost(proxy, Integer.parseInt(port)); 
          http.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxys); 
         } 
        } 

       } 
      } finally { 
       try { 
        mCursor.close(); 
       } catch (Exception e) { 
        mCursor = null; 
       } 
       mCursor = null; 
      } 
     } 

由於Android

DefaultHttpClient http = new DefaultHttpClient(); 
Cursor mCursor = ctx.getContentResolver().query(Uri.parse("content://telephony/carriers/preferapn"), new String[] { "name", "proxy", "port"},null, null, null); 

4.2代碼由於安全異常而失敗,非用戶非Process擁有權限WRITE_APN_SETTINGS。 我加了 和 但沒有任何效果。 有誰知道如何解決這個問題?

+0

對我來說就像是4.2的錯誤。閱讀apn設置應該仍然是允許的。可能值得在http://code.google.com/p/android/issues/ PS上提出一個錯誤,是什麼ROM?庫存4.2,4.2.1,CyanogenMod 10.1等? – SteelBytes

回答

1

WRITE_APN_SETTINGS

現在是現在的系統級權限:

"Ice Cream Sandwich" and WRITE_APN_SETTINGS

看來你需要設置你的應用程序,系統應用程序能夠使用APN設置以及需要一個根深蒂固的手機。

+1

'WRITE_APN_SETTINGS'不在ICS中被忽略。它現在是「簽名系統」權限,因此它只能由由固件簽名密鑰簽名或安裝在系統分區上的應用程序擁有。 Android 4.0做出了改變; Android 4.2製作*閱讀* APN數據也可以通過'WRITE_APN_SETTINGS'加以保護:http://commonsware.com/blog/2012/11/20/miscellaneous-android-4p2-regressions.html – CommonsWare

+0

這似乎是重點。不過,我不明白爲什麼WRITE_APN是一個閱讀設置的問題......生根不是一個選項,所以我必須強制用戶在apn中使用代理來將代理和端口存儲在我的應用程序的設置中:( – 2red13