私のAndroidアプリは、セルラー信号強度を監視します。CDMAデバイスでは、問題なく動作します。多くのGSMデバイスでは、問題なく動作します。ただし、一部のGSMデバイスでは、次のエラーメッセージが表示されて強制終了します。
java.lang.ClassCastException:android.telephony.cdma.CdmaCellLocationをandroid.telephony.gsm.GsmCellLocationにキャストできません
この問題は、米国の一部のSamsungデバイスで4GLTE信号を受信したときに発生すると確信しています。他のデバイスや国でも発生すると思います。私はまだ関係する正確なサービスプロバイダーとデバイスを特定しようとしています。
MyService.javaの関連するコードスニペットは次のとおりです。エラーメッセージで参照されている行に次のマークを付けました//********
:
public void onCreate() {
tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
...
}
public int onStartCommand(Intent in, int flags, int startId) {
signalStrengthListener = new SignalStrengthListener();
((TelephonyManager)getSystemService(TELEPHONY_SERVICE)).listen(signalStrengthListener, SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS | SignalStrengthListener.LISTEN_SERVICE_STATE | SignalStrengthListener.LISTEN_DATA_CONNECTION_STATE | SignalStrengthListener.LISTEN_CELL_LOCATION);
return START_STICKY;
...
}
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
isGSM = signalStrength.isGsm();
if (isGSM == true) {
GCellLoc = (GsmCellLocation)tm.getCellLocation(); //********
...
}
このコードがtrueを返しandroid.telephony.cdma
たときにのみトリガーされる必要がある場合、fromが表示される理由がわかりません。isGSM
おそらく、LTE信号が検出されると、Android APIに関する限り、電話はある種のデュアルCDMA / GSMモードになりますか?同様の動作のドキュメントを見つけることができませんでした。コードでこれをどのように処理できますか?ありがとう。