2012-06-02 42 views
0

我有一個市場上的應用程序(SIM鎖定通知程序),它依賴於接收廣播意圖* android.intent.action.SIM_STATE_CHANGED *時作出反應的廣播接收器。我開發了最新版本4.0的應用程序。 3(即SDK級別15),現在我想擴展它的兼容性到更低的級別(提供運行時檢查不可用的東西,如操作欄或偏好片段)...問題是,我想了解* SIM_STATE_CHANGED *事件也在老平臺上生成..這個意圖是沒有記錄的,甚至在SDK中的* platforms/android-15/data/broadcast_actions.txt *文件中都沒有發現。我是否應該深入瞭解源代碼它在哪裏實施,並降到哪個SDK級別?這是一個供應商特定的事件嗎?我有一個HTC One X在上面工作。從哪個SDK級別支持android.intent.action.SIM_STATE_CHANGED廣播意圖?

+1

我已經看到它被用於低至SDK版本4 – Pete

+0

「這個意圖沒有記錄」 - 那麼你不應該使用它。無法保證它可以在所有過去的設備上運行,除非您計劃花費大量資金購買每個設備並手動進行測試。不能保證它能在任何未來的設備上工作。歡迎核心Android團隊和設備製造商擺脫它,重命名它,忽略它等。 – CommonsWare

+0

我知道它..我的應用程序的開發開始作爲一個練習,我需要它,因爲可能在HOX的無線固件中出現問題。我發現了這個廣播事件,它在HOX上工作,現在我想將兼容性擴展到更低的SDK ..我不打算在大量的手機上進行測試。 –

回答

0

我不確定你的第一個問題,但我可以幫你解答第二個問題。

,現在我想它的兼容性擴展至較低水平 (提供不可用的東西運行時檢查,如操作欄或 偏好片段)

反思會幫助你在這種情況下, 。 使用反射,你可以查詢類可用的方法,構造等

假設你想在使用PopupMenu的你application.And它可能是你的應用程序仍然 要預先4.0 devices.So使用反射運行情況

下面的代碼片段和谷歌搜索位將幫助你。

String sClassName = "android.widget.PopupMenu"; 
    try { 
     Class classToInvestigate = Class.forName(sClassName); 
     Yes!!! Class is aviliable now do whatever you want to do with PopupMenu. 
     // Dynamically do stuff with this class 
     // List constructors, fields, methods, etc. 

    } catch (ClassNotFoundException e) { 
     // Class not found! 
     it means application is running on pre 4.0 version device. 
    } catch (Exception e) { 
     // Unknown exception 
    } 
+0

我在* AndroidManifest.xml *文件中使用* android.intent.action.SIM_STATE_CHANGED *在我的廣播接收器的意圖過濾器中,所以我不能做一個運行時檢查..此外,沒有這個我的應用程序是沒有意義的廣播事件,所以我只想在可用的地方使用它。 –