2016-04-01 13 views
0

私のアプリでgsmSignalStrength()を表示しようとしています。 simが存在するかどうかを確認するために次のコードを使用します。SIMカードが存在する場合でも、Android 5.0のSIM_STATE_ABSENTは2番目のスロットでfalseを返します

private boolean checkIfSimIsPresent() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { 
     SubscriptionManager sManager = (SubscriptionManager) mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); 
     SubscriptionInfo infoSim1 = sManager.getActiveSubscriptionInfoForSimSlotIndex(0); 
     SubscriptionInfo infoSim2 = sManager.getActiveSubscriptionInfoForSimSlotIndex(1); 
     if(infoSim1 != null || infoSim2 != null) { 
      return true; 
     } 
    } else { 
     TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 
     if (telephonyManager.getSimState() != TelephonyManager.SIM_STATE_ABSENT){ 
      return true; 
     } 
    } 
    return false; 
} 

このコードは非常に細かいものです。しかし、Android Lollipop 5.0では、SIMカードを挿入しても、2番目のSIMスロットは常にfalseを返します。

誰も同じ問題に直面しましたか? AndroidシステムはgsmStrengthを表示しますが、Telephony ManagerのSIM_STATE_ABSENTがfalseを返すのはなぜですか?

一般的に、Android Systemは正しい値をどのように表示しますか?彼らは内部的に何を聞くのですか?

+0

_ "しかし、Androidのロリポップ5.0で..." _ドキュメントから: "'公共SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(slotIdxをint型) ' ** 22 ** APIレベルで追加された" APIレベル22がアンドロイドである** 5.1 **。 – Michael

+0

両方のSIMが使用中のデバイス設定で有効になっているかどうかを確認します –

答えて