Mendeteksi target SimCard dari panggilan masuk di perangkat Multi-Sim

10

Saya telah membaca banyak posting dan mencoba banyak solusi, tetapi poin umum dari semua posting adalah bahwa mereka semua sudah ketinggalan zaman dan setidaknya saya tidak dapat menemukan solusi yang akan bekerja pada versi Android yang lebih baru.

Posting 1 , Hasil: intent.getExtras().getInt("simId", -1)selalu mengembalikan -1

Posting 2 , Hasil: intent.getExtras().getInt("slot", -1)selalu mengembalikan -1

Posting 3 , Hasil:

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

Log:

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

ini menampilkan log yang sama dengan nilai 0 yang sama untuk SimCard pertama dan SimCard kedua.

Saya juga sudah mencoba posting serupa lainnya. Tidak ada yang bekerja pada versi baru Android!

Apakah ada solusi lain yang berfungsi pada Android versi terbaru (7.0 atau lebih tinggi)?

Alireza Noorali
sumber
intent.getExtras().getInt("item")<- Bukankah seharusnya kamu menggunakan itembukan "item"?
Michael
Juga, apakah Anda mencoba mencetak semua ekstra yang Intent tidak mengandung, untuk melihat apakah ada perbedaan dalam penamaan dibandingkan dengan apa yang Anda mengasumsikan?
Michael
selalu mengembalikan 0 apakah dengan "item" atau item.
Alireza Noorali
Yah, "item"hampir pasti salah dalam konteks ini. Seperti yang saya katakan, coba cetak apa yang Anda miliki daripada apa yang Anda harapkan. Meskipun seluruh solusi ini terlihat seperti sedikit peretasan, jadi kunci apa pun yang dapat digunakan yang Anda temukan mungkin masih tidak berfungsi pada beberapa perangkat.
Michael

Jawaban:

1

Secara resmi, satu-satunya nilai yang didokumentasikan yang disediakan oleh maksud adalah nomor telepon.

Beberapa konstruktor menambahkan nilai lain seperti nomor slot sim dalam maksud, tetapi ini tidak wajib. Inilah sebabnya mengapa ada begitu banyak nama kunci slot yang mungkin, seperti yang disajikan pada pos 3 , masing-masing konstruktor menambahkan implementasinya sendiri.

Mungkin juga beberapa konstruktor tidak menambahkan nilai ini dalam beberapa model, dan itu tentu terjadi pada model Anda. Tidak ada cara untuk menemukan nilai ini jika konstruktor tidak memberikannya.

dgp
sumber
Karena jawabannya hanyalah sebuah penjelasan, saya tidak dapat menyetujui atau menolaknya secara definitif. Tetapi ternyata, jawabannya logis.
Alireza Noorali
2

Jika Anda telah melakukan ini, itu akan berhasil. pastikan perangkat pengujian Anda berjalan pada Android 5.1 atau lebih tinggi. dukungan dual sim ditambahkan dalam v 5.1 (Periksa di sini )

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

Pastikan Anda menambahkan izin di bawah ini dalam manifes

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

CATATAN :

Nilai-nilai ini tidak perlu datang sepanjang waktu. Diperlukan dukungan penyedia jaringan. Baca dokumentasi di sini

Id operator berlangganan saat ini. Kembalikan UNKNOWN_CARRIER_ID jika langganan tidak tersedia atau operator tidak dapat diidentifikasi.

droidev
sumber
1
Saya sudah menambahkan READ_PHONE_STATEizin tetapi saya selalu mendapatkancallingSIM = -1
Alireza Noorali
@AlirezaNoorali perangkat mana yang Anda gunakan untuk menguji. dan Anda membuatnya bekerja di bawah perangkat Android 7?
droidev
perangkat ini adalah Samsung Galaxy S6 Android 7.0. Saya tidak yakin tentang perangkat Android 7 di bawah ini
Alireza Noorali
apakah Anda dapat mengambil simIds secara normal? ketika Anda tidak sedang menelepon
droidev