Multi-Sim cihazlarda gelen aramanın hedef SimCard'ını algılama


10

Çok sayıda yazı okudum ve birçok çözüm denedim, ancak tüm yayınların ortak noktası, hepsinin modası geçmiş olması ve en azından Android'in yeni sürümlerinde çalışacak bir çözüm bulamadım.

Post 1 , Sonuç: intent.getExtras().getInt("simId", -1)her zaman -1 döndürür

Post 2 , Sonuç: intent.getExtras().getInt("slot", -1)her zaman -1 döndürür

Post 3 , Sonuç:

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));
}

Kütükler:

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

ilk SimCard ve ikinci SimCard için aynı 0 değeriyle aynı günlükleri görüntüler.

Başka benzer gönderileri de denedim. Hiçbiri yeni android sürümlerinde çalıştı!

Android'in yeni sürümlerinde (7.0 veya üstü) çalışan başka bir çözüm var mı?


intent.getExtras().getInt("item")<- Bunun itemyerine kullanmamalısın "item"?
Michael

Ayrıca, Niyet tüm ekstralar baskı denediniz yok sen varsayıyoruz ne göre adlandırma bir fark olup olmadığını görmek için içeriyor?
Michael

"item" veya item ile her zaman 0 döndürür.
Alireza Noorali

Eh, "item"neredeyse kesinlikle yanlış bu bağlamda olduğunu. Dediğim gibi, beklediğinizden ziyade sahip olduklarınızı yazdırmayı deneyin. Tüm bu çözüm bir parça kesmek gibi görünse de, bulabileceğiniz herhangi bir kullanılabilir anahtar bazı cihazlarda çalışmayabilir.
Michael

Yanıtlar:


1

Resmi olarak, niyet tarafından sağlanan tek belgelenmiş değer telefon numarasıdır.

Bazı kurucular, amaç içinde sim yuva numarası gibi başka değerler ekler, ancak bu zorunlu değildir. Bu nedenle, 3. sonda sunulanlar gibi , her yapıcı kendi uygulamasını ekleyen o kadar çok slot anahtarı adı vardır .

Bazı kurucuların bu değeri bazı modellerde eklememesi de mümkündür ve bu kesinlikle modelinizde geçerlidir. Yapıcı bunu teslim etmezse, bu değeri bulmanın bir yolu yoktur.


Cevap basit bir açıklama olduğu için, kesin olarak onaylayamam veya reddedemem. Ama ortaya çıktığı gibi, cevap mantıklı.
Alireza Noorali

2

Eğer böyle yaptıysanız işe yarayacaktır. test cihazınızın Android 5.1 veya üzeri sürümlerde çalıştığından emin olun. v 5.1'de çift sim desteği eklendi ( Buraya bakın )

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
        }
    }
}

Manifest'te aşağıdaki izni eklediğinizden emin olun

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

NOT :

Bu değerlerin her zaman gelmesi gerekmez. ağ sağlayıcı desteği gereklidir. lütfen belgeleri okuyun burada

Geçerli aboneliğin operatör kimliği. Abonelik kullanılamıyorsa veya operatör tanımlanamıyorsa UNKNOWN_CARRIER_ID değerini döndürün.


1
Zaten READ_PHONE_STATEizin ekledim ama her zaman alıyorumcallingSIM = -1
Alireza Noorali

@AlirezaNoorali test etmek için hangi cihazı kullandığınızı gösterir. ve Android 7 cihazlarının altında mı çalışıyorsunuz?
droidev

cihaz Samsung Galaxy S6 Android 7.0. Android 7 cihazların altında emin değilim
Alireza Noorali

SimId'leri normal şekilde alabiliyor musunuz? çağrı
yapmadığınızda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.