Multi-Sim 장치에서 수신 전화의 대상 SimCard 감지


10

나는 많은 게시물을 읽고 많은 솔루션을 시도했지만 모든 게시물의 공통점은 모두 구식이며 적어도 최신 버전의 Android에서 작동하는 솔루션을 찾을 수 없다는 것입니다.

Post 1 , 결과 : intent.getExtras().getInt("simId", -1)항상 -1을 반환

Post 2 , 결과 : intent.getExtras().getInt("slot", -1)항상 -1을 반환

게시물 3 , 결과 :

String[] array = new String[]{
        "extra_asus_dial_use_dualsim",
        "com.android.phone.extra.slot",
        "slot",
        "simslot",
        "sim_slot",
        "subscription",
        "Subscription",
        "phone",
        "com.android.phone.DialingMode",
        "simSlot",
        "slot_id",
        "simId",
        "simnum",
        "phone_type",
        "slotId",
        "slotIdx"
};

for (String item :
        array) {
    Log.i(TAG, "Sim Card - " + item + " -----> " + intent.getExtras().getInt(item));
}

로그 :

PhoneCallReceiver: Sim Card - extra_asus_dial_use_dualsim -----> 0
PhoneCallReceiver: Sim Card - com.android.phone.extra.slot -----> 0
PhoneCallReceiver: Sim Card - slot -----> 0
PhoneCallReceiver: Sim Card - simslot -----> 0
PhoneCallReceiver: Sim Card - sim_slot -----> 0
PhoneCallReceiver: Sim Card - subscription -----> 0
PhoneCallReceiver: Sim Card - Subscription -----> 0
PhoneCallReceiver: Sim Card - phone -----> 0
PhoneCallReceiver: Sim Card - com.android.phone.DialingMode -----> 0
PhoneCallReceiver: Sim Card - simSlot -----> 0
PhoneCallReceiver: Sim Card - slot_id -----> 0
PhoneCallReceiver: Sim Card - simId -----> 0
PhoneCallReceiver: Sim Card - simnum -----> 0
PhoneCallReceiver: Sim Card - phone_type -----> 0
PhoneCallReceiver: Sim Card - slotId -----> 0
PhoneCallReceiver: Sim Card - slotIdx -----> 0

첫 번째 SimCard와 두 번째 SimCard에 대해 동일한 값 0을 가진 동일한 로그를 표시합니다.

나는 다른 비슷한 게시물을 시도했습니다. 새로운 버전의 Android에서는 작동하지 않았습니다!

최신 버전의 Android (7.0 이상)에서 작동하는 다른 솔루션이 있습니까?


intent.getExtras().getInt("item")<- item보다 사용 하지 "item"않습니까?
마이클

또한, 당신이 의도하는 모든 엑스트라 인쇄 시도가 않습니다 당신이 가정하는지에 비해 네이밍에 차이가 있는지 포함을?
마이클

"item"이든 item이든 관계없이 항상 0을 반환합니다.
Alireza Noorali

글쎄, "item"이 맥락에서 거의 확실하지 않습니다. 내가 말했듯이, 당신이 기대하는 것보다 가지고있는 것을 인쇄 해보십시오. 이 전체 솔루션은 약간의 해킹처럼 보이지만 사용 가능한 키는 일부 장치에서 여전히 작동하지 않을 수 있습니다.
Michael

답변:


1

공식적으로, 유일하게 문서화 된 값 의도가 제공하는 전화 번호입니다.

일부 생성자는 의도에 sim 슬롯 번호와 같은 다른 값을 추가하지만 필수는 아닙니다. 그렇기 때문에 post 3에 표시된 것과 같이 슬롯 키 이름이 너무 많기 때문에 각 생성자는 자신의 구현을 추가합니다.

일부 생성자가 일부 모델에서이 값을 추가하지 않았을 수도 있으며, 이는 확실히 모델의 경우입니다. 생성자가 값을 전달하지 않으면이 값을 찾는 방법이 없습니다.


답은 단순히 설명 일 뿐이므로 결정적으로 승인하거나 거부 할 수 없습니다. 그러나 그 결과는 논리적입니다.
Alireza Noorali

2

이 작업을 수행하면 작동합니다. 테스트 기기가 Android 5.1 이상에서 실행되는지 확인하십시오. 듀얼 심 지원 기능이 v 5.1에 추가되었습니다 ( 여기에서 확인 ).

public class IncomingCallInterceptor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    String callingSIM = "";
    Bundle bundle = intent.getExtras();
    callingSIM = String.valueOf(bundle.getInt("simId", -1));

    if(callingSIM.equals("0")){
           // Incoming call from SIM1
        } else if(callingSIM.equals("1")){
           // Incoming call from SIM2
        }
    }
}

매니페스트에 아래 권한을 추가했는지 확인하십시오.

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

노트 :

이 값은 항상 올 필요는 없습니다. 네트워크 공급자 지원이 필요합니다. 여기 에서 설명서를 읽으 십시오

현재 구독의 운송 업체 ID 구독을 사용할 수 없거나 이동 통신사를 식별 할 수없는 경우 UNKNOWN_CARRIER_ID를 반환하십시오.


1
나는 이미 READ_PHONE_STATE허가를 추가 했지만 항상 얻는다callingSIM = -1
Alireza Noorali

@AlirezaNoorali 테스트하는 데 사용하는 장치입니다. Android 7 기기에서 작동합니까?
droidev

기기는 Samsung Galaxy S6 Android 7.0입니다. 나는 안드로이드 7 장치 아래에 대해 잘 모르겠습니다
Alireza Noorali

simId를 정상적으로 검색 할 수 있습니까? 통화
중이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.