2013-04-10 56 views
1

免責聲明 - 我知道如何調用非API方法會影響我的應用程序。它不會在Google Play上發佈,我只是爲了個人使用而創建它。如何獲得可用的網絡運營商? (使用RIL和非API方法)

任務 - 在固定電話(Android 2.3.3)上獲得可用網絡運營商。模型是已知的。

有什麼我試圖

很多反思:

  • 我試着去PhoneFactory,得到默認PhonegetDefaultPhone)或GSMPhone。我已收到PhoneProxy的實際參考,並能夠致電getAvailableNetworks,返回CommandException - RADIO_NOT_AVAILABLE
  • 試圖直接將RIL瞬發。試圖在這裏調用getAvailableNetworks,結果相同(RADIO_NOT_AVAILABLE)。試圖呼叫registerForAvaiable,它永遠不會將消息發送回Handler。
  • 試圖將LocalSocket連接到「rild」。獲取IOException: Permission denied

我試過上面的所有內容,我的應用存儲在/system/app/ - 結果相同。

問題

  1. 它甚至有可能訪問RIL方法無需登錄我的應用程序與系統中的關鍵或使用定製的Android構建?
  2. 也許我可以通過直接爲Linux構建應用程序來克服這個問題?
  3. 有關這個問題的任何意見是高度讚賞。
+1

您可以嘗試連接到「RILD調試」插座。 [見此信息以供的信息。] [1] [1]:http://stackoverflow.com/questions/9298750/how-to-connect-to-rild-socket/9314848 #9314848 – 2013-06-07 19:44:14

回答

3

你可以建立你自己的RIL實施。你可以通過設置android propety rild.lib來告訴Android來加載你的庫。 在一個根深蒂固的手機,你可以做

getprop | grep ril 

看到你當前使用的RILD庫。

sierra gsm dongles/huawei dongles等有開源的ril實現。 你會得到一個想法。

但並非一切皆有可能。有了這個機制,你只能實現android正在給你做的回調。例如。它不允許你進行數據漫遊連接。這仍然由android框架控制。

要更改當前RILD庫到你自己的,你可以設置

setprop rild.lib \system\modules\yourlibrary.so 

又見http://www.kandroid.org/online-pdk/guide/telephony.html

+0

我想強制手機只連接到一個運營商(給定的MCC和MNC)。這怎麼可能 ? – ofskyMohsen 2017-07-26 06:31:19

4

有趣的問題 - 如果我們可以訪問RIL,這將是非常好的。

在XDA上我有時會找到顯示RIL信息的應用程序。當我仔細觀察時,我通常會發現他們調用鍵盤代碼然後解析輸出 - 而不是調用API。哦,這是其中的一個應用程序。 (此方法是製造商特定)
http://forum.xda-developers.com/showthread.php?t=1687249

這裏有一個關於PhoneFactory等
https://stackoverflow.com/a/6504808/150016

後這裏還有關於該主題一個很好的討論:
Can a telephony.Phone object be instantiated through the sdk?

+0

第一個鏈接似乎有幫助,謝謝。 – 2013-04-10 16:42:47