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.