2015-12-29 18 views
7

Znasz numer gniazda sim tylko w odbiorniku transmisji. Po miesiącu badań mam jedno rozwiązanie, które jest praca w porządku dla mnie jak poniżejJak poznać numer SimSlot dla każdego połączenia/sms?

pierwsze Dodaj jako gość android.permission.READ_PHONE_STATE do pliku manifestu

Wdrożenie odbiornik dla wydarzenie, które otrzymują telefon CALL/wydarzenia sMS dla aplikacji

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

Czy to możliwe bez odbiornika? czy możemy uzyskać identyfikator sim z CallLog.Calls.PHONE_ACCOUNT_ID)? –

+0

tak, ale zanim będziesz potrzebować znać KeyName dla gniazda Numer – user3131373

+0

KeyName masz na myśli "sim_id" lub "subscription_id"? –

Odpowiedz

0

sms w lizak 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 
    } 
} 
} 

przetestowany w Lenovo K3 nocie

+0

Testujesz tylko na jednym urządzeniu, ale nie działa ono dla wszystkich. Klucz Samsung Devices jest inny. Testuję na wielu Producentach Musisz sprawdzić "Klucz" istnieje jest bundal, np. Slot, simId, subscriptionid itp. – user3131373

+0

@ user3131373, myślę, że z Lollipop MR1 wszystkie urządzenia mają tę samą właściwość dla tego – Hamidreza

+0

Musisz przechwytywać numer slota tylko dla L + lub całe wersje? Mój kod działa dla wersji Android powyżej 3.6 [testowałem tak wiele urządzeń] – user3131373