ตรวจจับ SimCard เป้าหมายของการโทรเข้าในอุปกรณ์ Multi-Sim


10

ฉันได้อ่านบทความจำนวนมากและลองใช้วิธีแก้ไขปัญหาต่าง ๆ มากมาย แต่จุดร่วมของโพสต์ทั้งหมดก็คือพวกเขาทั้งหมดล้าสมัยและอย่างน้อยฉันก็ไม่พบวิธีแก้ปัญหาที่จะทำงานบน Android รุ่นใหม่กว่า

โพสต์ 1 , ผลลัพธ์: intent.getExtras().getInt("simId", -1)ส่งคืน -1 เสมอ

โพสต์ 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

มันจะแสดงบันทึกเดียวกันโดยมีค่าเดียวกันเป็น 0 สำหรับซิมการ์ดแรกและซิมการ์ดที่สอง

ฉันได้ลองโพสต์อื่นที่คล้ายกัน ไม่มีใครทำงานกับ Android เวอร์ชันใหม่!

มีวิธีแก้ไขปัญหาอื่นที่ใช้กับ Android เวอร์ชันใหม่กว่า (7.0 หรือสูงกว่า) หรือไม่


intent.getExtras().getInt("item")<- คุณไม่ควรใช้itemมากกว่า"item"หรือ?
ไมเคิล

นอกจากนี้คุณลองพิมพ์อุปกรณ์เสริมทั้งหมดที่ Intent มีอยู่หรือไม่เพื่อดูว่ามีความแตกต่างในการตั้งชื่อเทียบกับสิ่งที่คุณสมมติหรือไม่?
ไมเคิล

มันจะคืนค่า 0 เสมอว่า "item" หรือ item
Alireza Noorali

ดี"item"เป็นเกือบแน่นอนไม่ถูกต้องในบริบทนี้ อย่างที่ฉันพูดลองพิมพ์สิ่งที่คุณมีมากกว่าที่คุณคาดหวัง แม้ว่าโซลูชันทั้งหมดนี้จะดูเหมือนแฮ็กเล็กน้อย แต่คีย์ที่ใช้งานได้ที่คุณพบอาจยังไม่สามารถใช้งานได้ในอุปกรณ์บางอย่าง
ไมเคิล

คำตอบ:


1

อย่างเป็นทางการค่าเอกสารเท่านั้นที่ให้ไว้โดยเจตนาคือหมายเลขโทรศัพท์

คอนสตรัคเตอร์บางตัวเพิ่มค่าอื่น ๆ เช่นหมายเลขสล็อตซิมในเจตนา แต่นี่ไม่ได้บังคับ นี่คือเหตุผลที่มีชื่อสล็อตคีย์มากมายที่เป็นไปได้เช่นเดียวกับที่แสดงในโพสต์ 3ผู้สร้างแต่ละรายเพิ่มการใช้งานของเขาเอง

อาจเป็นไปได้ว่าคอนสตรัคเตอร์บางตัวไม่ได้เพิ่มค่านี้ในบางรุ่นและนั่นก็เป็นตัวอย่างในโมเดลของคุณ ไม่มีทางที่จะหาค่านี้ได้หากคอนสตรัคเตอร์ไม่ได้ส่งมอบมัน


เนื่องจากคำตอบเป็นเพียงคำอธิบายฉันไม่สามารถอนุมัติหรือปฏิเสธได้อย่างแน่นอน แต่เมื่อปรากฎคำตอบก็สมเหตุสมผล
Alireza Noorali

2

หากคุณได้ทำเช่นนี้มันควรจะได้ผล ตรวจสอบให้แน่ใจว่าอุปกรณ์ทดสอบของคุณทำงานบน Android 5.1 หรือสูงกว่า รองรับ dual sim เพิ่มใน 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 ฉันไม่แน่ใจเกี่ยวกับอุปกรณ์ android 7 ด้านล่าง
Alireza Noorali

คุณสามารถดึง simIds ได้ตามปกติ? เมื่อคุณไม่ได้อยู่ในสาย
droidev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.