2017-08-13 61 views
0

在我的Android應用程序,以確定某些功能,我使用getSimCountryIso()getNetworkCountryIso()檢查設備的ISO國家代碼。 測試這對我的真正的移動設備和仿真器及所有返回的特定值沒有任何錯誤。當getSimCountryIso()調用Android平板電腦會發生什麼?

其中之一是我這中有一個SIM卡日常駕駛的手機,但該有的都沒有SIM卡。所以剛開始,我還以爲這兩個getSimCountryIso()getNetworkCountryIso()總是返回一些值,但現在我很懷疑,因爲曾經有一次,SIM卡和模擬器我所有的真正的設備可以從以假亂真不同。

我不知道會發生什麼,當這些被稱爲真正的平板電腦,其中從來沒有SIM卡在他們和只有WiFi連接。我總能期待一定的價值嗎?或者是一個異常或null?

回答

1

我以爲你會得到一個NullPointerException,但在平板電腦上測試過它 - 像素C,運行牛軋糖 - 我實際上得到空字符串爲TelephonyManager.getSimCountryIso()TelephonyManager.getNetworkCountryIso()

我假定結果將是NPE,因爲在平板電腦上調用PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)將返回false。這足以告訴我,您不應該試圖在非電話設備上以這種方式獲取SIM卡或網絡國家代碼。但是,如果您試圖在這樣的設備上使用Context.getSystemService()來檢索TelephonyManager,那麼仍然會獲得非空值TelephonyManager - 這對於提供SIM或網絡國家/地區沒有幫助。

在我看來,如果您正在處理的設備沒有電話系統功能,那麼您應該考慮使用GPS位置或用戶設置的區域設置,如果您真的不想侵犯位置權限並且可以容忍用戶設置的區域設置不在用戶必須的位置。

+0

非常感謝您的測試和友好的答覆!它幫助了很多,我永遠不會知道沒有這個.. – Jenix

+0

僅供參考,我在Genymotion的像素C牛軋糖模擬器進行測試。 PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)返回true,TelephonyManager.getSimCountryIso()和TelephonyManager.getNetworkCountryIso()返回字符串「us」。再一次,你的回答是非常有幫助的,謝謝! – Jenix

+0

沒問題!很高興我能幫上忙。我想知道你的Pixel C是否因模擬器中的某些設置而返回true和「us」...奇怪... –

相關問題