2015-12-29 15 views
7

Sie kennen die Sim-Slot-Nummer nur im Rundfunkempfänger. Nach einem Monat der Forschung habe ich eine Lösung, die für mich arbeiten gut unterWie kann man die SimSlot-Nummer für jeden Anruf/jede SMS?

Zum einen

implementieren Empfänger die android.permission.READ_PHONE_STATE Erlaubnis Ihre Manifest-Datei hinzufügen für die Telefon Ereignis, das Anruf/SMS Ereignisse für Ihre Anwendung erhalten

public class CallSMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     Log.d("SIM_SLOT"," Slot Number "+capturedSimSlot(extras)); 
    } 
    } 

/*below methods captures the sim slot number from bundle */ 

public int capturedSimSlot(Bundle bundle){ 

     int whichSIM =-1; 
     if (bundle.containsKey("subscription")) { 
      whichSIM = bundle.getInt("subscription"); 
     } 
     if(whichSIM >=0 && whichSIM < 5){ 
      /*In some device Subscription id is return as subscriber id*/ 
      sim = ""+whichSIM; 
     }else{ 
      if (bundle.containsKey("simId")) { 
       whichSIM = bundle.getInt("simId"); 
      }else if (bundle.containsKey("com.android.phone.extra.slot")) { 
       whichSIM = bundle.getInt("com.android.phone.extra.slot"); 
      }else{ 
       String keyName = ""; 
       for(String key : bundle.keySet()){ 
        if(key.contains("sim")) 
         keyName =key; 
       } 
       if (bundle.containsKey(keyName)) { 
        whichSIM = bundle.getInt(keyName); 
       } 
      } 
     } 
     return whichSIM; 
    } 
} 
+0

Ist es möglich, ohne Empfänger? können wir sim id von CallLog.Calls.PHONE_ACCOUNT_ID) bekommen? –

+0

Ja, aber bevor Sie den Schlüsselname für den Steckplatz kennen müssen Nummer – user3131373

+0

KeyName meinen Sie "sim_id" oder "subscription_id"? –

Antwort

0

für SMS in Lutscher 22+

public class MessageReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    int slot = Integer.parseInt((String) intent.getExtras().get("slot")); 
    if(slot == 0){ 
    // sim1 
    } 
    if(slot == 1){ 
    // sim2 
    } 
} 
} 

in Lenovo K3 Note getestet

+0

Sie testen auf nur einem Gerät, aber es funktioniert nicht für alle. Samsung Devices Key ist anders. Ich Test auf mehrere Hersteller Sie müssen überprüfen, "Key" existiert ist Bundal dh Steckplatz, SimId, SubscriptionID usw. – user3131373

+0

@ user3131373, ich denke, von Lollipop MR1 alle Geräte die meisten haben die gleiche Eigenschaft für die – Hamidreza

+0

Sie müssen Slot-Nummer nur für L + oder erfasst ganze Versionen? Mein Code funktioniert für Android-Version über 3.6 [Ich testete so viele Geräte] – user3131373