どんどんandroidのバージョンが上がって2.1辺りでCDMA2000対応された。
日本でもauからandroid端末が出て、もう避けて通れなくなったので、無線方式に依存するTelephony系を実験した結果を記録。
TelephonyManagerとSignalStrengthは、通信方式によらず呼び出し可能。
通信方式に依存するパラメータは、無効な値が入るだけ。
onCellLocationChangedは通信方式によって、CellLocationにgsmCellLocationかcdmaCellLocationが設定される。
メソッドも違うので、GSM/WCDMAなのにgetBaseStationId()したり、CDMAなのにgetLac()したりすると例外が発生する。
android2.0まではGSM前提で書いていた処理を、通信方式CDMA対応させる必要が出てくる。
試行錯誤の結果、下記でGSM/WCDMAとCDMA2000両対応完了。
docomoのXperiaとauのIS03で動作確認できた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //基地局の変化時に呼ばれる @Override public void onCellLocationChanged(CellLocation location) { strCellLocation= "\n--- android.telephony.CellLocation:\n" ; if (location instanceof GsmCellLocation){ strCellLocation+= "***GsmCellLocation\n" ; GsmCellLocation loc=(GsmCellLocation)location; strCellLocation+= "getCid()=" +loc.getCid()+ "\n" ; strCellLocation+= "getLac()=" +loc.getLac()+ "\n" ; } else if (location instanceof CdmaCellLocation){ strCellLocation+= "***CdmaCellLocation\n" ; CdmaCellLocation loc=(CdmaCellLocation)location; strCellLocation+= "getBaseStationId()=" +loc.getBaseStationId()+ "\n" ; strCellLocation+= "getBaseStationLatitude()=" +loc.getBaseStationLatitude()+ "\n" ; strCellLocation+= "getBaseStationLongitude()=" +loc.getBaseStationLongitude()+ "\n" ; strCellLocation+= "getNetworkId()=" +loc.getNetworkId()+ "\n" ; strCellLocation+= "getSystemId()=" +loc.getSystemId()+ "\n" ; } } |
IS03の結果
— android.telephony.CellLocation:
***CdmaCellLocation
getBaseStationId()=1202
getBaseStationLatitude()=507216
getBaseStationLongitude()=2011139
getNetworkId()=21560
getSystemId()=12305