मल्टी-सिम उपकरणों में इनकमिंग कॉल के लक्ष्य सिम्कार्ड का पता लगाना


10

मैंने बहुत सारी पोस्ट पढ़ी हैं और कई समाधानों की कोशिश की है, लेकिन सभी पोस्टों का सामान्य बिंदु यह था कि वे सभी पुराने थे और कम से कम मुझे ऐसा समाधान नहीं मिला जो एंड्रॉइड के नए संस्करणों पर काम करे।

पोस्ट 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

यह पहले SimCard और दूसरे SimCard के लिए समान मान 0 के साथ समान लॉग प्रदर्शित करता है।

मैंने भी इसी तरह की अन्य पोस्ट की कोशिश की है। Android के नए संस्करणों पर किसी ने काम नहीं किया!

क्या एक और समाधान है जो एंड्रॉइड के नए संस्करणों (7.0 या उच्चतर) पर काम करता है?


intent.getExtras().getInt("item")<- क्या आपको itemइसके बजाय उपयोग नहीं करना चाहिए "item"?
माइकल

इसके अलावा, आप सभी अतिरिक्त कि आशय मुद्रण की कोशिश की है है होते हैं, अगर वहाँ आप क्या सोचते हैं कर रहे हैं की तुलना में नामकरण में एक फर्क है देखने के लिए?
माइकल

यह हमेशा "आइटम" या आइटम के साथ 0 देता है।
अलीरज़ा नूराली

खैर, "item"इस संदर्भ में लगभग निश्चित रूप से गलत है। जैसा मैंने कहा, आप जो अपेक्षा कर रहे हैं उसके बजाय जो आपके पास है उसे छापने का प्रयास करें। हालांकि यह पूरा समाधान एक हैक की तरह दिखता है, इसलिए किसी भी उपयोगी कुंजी जो आपको मिलती है, वह अभी भी कुछ उपकरणों पर काम नहीं कर सकती है।
माइकल

जवाबों:


1

आधिकारिक तौर पर, इरादे से प्रदान किया गया एकमात्र दस्तावेज मूल्य फोन नंबर है।

कुछ निर्माता इरादे में सिम स्लॉट संख्या जैसे अन्य मान जोड़ते हैं, लेकिन यह अनिवार्य नहीं है। यही कारण है कि बहुत सारे स्लॉट कुंजी नाम संभव हैं, जैसे कि पोस्ट 3 में प्रस्तुत किए गए हैं , प्रत्येक निर्माता अपने स्वयं के कार्यान्वयन को जोड़ रहा है।

यह भी संभव है कि कुछ निर्माता ने कुछ मॉडलों में इस मूल्य को नहीं जोड़ा है, और यह निश्चित रूप से आपके मॉडल पर मामला है। यदि कंस्ट्रक्टर इसे वितरित नहीं करता है, तो इस मूल्य को खोजने का कोई तरीका नहीं है।


क्योंकि उत्तर केवल एक स्पष्टीकरण है, मैं इसे निश्चित रूप से स्वीकार या अस्वीकार नहीं कर सकता। लेकिन जैसा कि यह पता चला है, जवाब तर्कसंगत है।
अलीरज़ा नूराली

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"/>

ध्यान दें :

इन मूल्यों को हर समय नहीं आने की जरूरत है। नेटवर्क प्रदाता का समर्थन आवश्यक है। कृपया यहां प्रलेखन पढ़ें

वर्तमान सदस्यता के वाहक आईडी। यदि सदस्यता अनुपलब्ध है या वाहक की पहचान नहीं की जा सकी तो UNKNOWN_CARRIER_ID पर लौटें।


1
मैंने पहले ही READ_PHONE_STATEअनुमति जोड़ ली है, लेकिन मुझे हमेशा मिलता हैcallingSIM = -1
अलिरेज़ा नूराली

@AlirezaNoorali आप परीक्षण करने के लिए किस उपकरण का उपयोग कर रहे हैं। और आप इसे एंड्रॉइड 7 उपकरणों के नीचे काम कर रहे हैं?
droidev

डिवाइस सैमसंग गैलेक्सी एस 6 एंड्रॉयड 7.0 है। मैं नीचे Android 7 उपकरणों के बारे में निश्चित नहीं हूँ
Alireza Noorali

क्या आप सामान्य रूप से सिम प्राप्त करने में सक्षम हैं? जब आप कॉल पर नहीं होते हैं
droidev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.