Phát hiện SimCard mục tiêu của cuộc gọi đến trong các thiết bị Multi-Sim


10

Tôi đã đọc rất nhiều bài đăng và thử nhiều giải pháp, nhưng điểm chung của tất cả các bài đăng là tất cả chúng đều lỗi thời và ít nhất tôi không thể tìm thấy giải pháp nào hoạt động trên các phiên bản Android mới hơn.

Bài 1 , Kết quả: intent.getExtras().getInt("simId", -1)luôn trả về -1

Bài 2 , Kết quả: intent.getExtras().getInt("slot", -1)luôn trả về -1

Bài 3 , kết quả:

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

Nhật ký:

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

nó hiển thị cùng một bản ghi có cùng giá trị 0 cho SimCard thứ nhất và SimCard thứ hai.

Tôi cũng đã thử các bài viết tương tự khác. Không ai làm việc trên các phiên bản mới của Android!

Có giải pháp nào khác hoạt động trên các phiên bản Android mới hơn (7.0 trở lên) không?


intent.getExtras().getInt("item")<- Bạn không nên sử dụng itemchứ không phải "item"?
Michael

Ngoài ra, bạn đã thử in tất cả các tính năng bổ sung mà tiếp cận mục đích không chứa, để xem nếu có một sự khác biệt trong cách đặt tên so với những gì bạn đang giả định?
Michael

nó luôn trả về 0 cho dù với "item" hay item.
Alireza Noorali

Vâng, "item"gần như chắc chắn là không chính xác trong bối cảnh này. Như tôi đã nói, hãy thử in những gì bạn có hơn là những gì bạn đang mong đợi. Mặc dù toàn bộ giải pháp này trông giống như một chút hack, vì vậy mọi khóa có thể sử dụng mà bạn tìm thấy vẫn có thể không hoạt động trên một số thiết bị.
Michael

Câu trả lời:


1

Chính thức, giá trị tài liệu duy nhất được cung cấp bởi mục đích là số điện thoại.

Một số nhà xây dựng thêm các giá trị khác như số khe cắm sim trong ý định, nhưng điều này không bắt buộc. Đây là lý do tại sao có rất nhiều tên khóa khe có thể, giống như các tên được trình bày trong bài 3 , mỗi hàm tạo thêm phần thực hiện của riêng mình.

Cũng có thể một số nhà xây dựng đã không thêm giá trị này vào một số mô hình và đó chắc chắn là trường hợp trên mô hình của bạn. Không có cách nào tìm thấy giá trị này nếu nhà xây dựng không cung cấp nó.


Bởi vì câu trả lời chỉ đơn giản là một lời giải thích, tôi không thể dứt khoát chấp nhận hoặc từ chối nó. Nhưng hóa ra, câu trả lời là hợp lý.
Alireza Noorali

2

Nếu bạn đã làm như thế này thì nó sẽ hoạt động. đảm bảo thiết bị thử nghiệm của bạn chạy trên Android 5.1 trở lên. hỗ trợ hai sim được thêm vào trong phiên bản 5.1 (Kiểm tra tại đây )

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

Hãy chắc chắn rằng bạn đã thêm quyền dưới đây trong tệp kê khai

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

GHI CHÚ :

Những giá trị này không cần phải đến mọi lúc. hỗ trợ nhà cung cấp mạng là bắt buộc. Vui lòng đọc tài liệu ở đây

Id nhà cung cấp của thuê bao hiện tại. Trả về UNKNOWN_CARRIER_ID nếu đăng ký không khả dụng hoặc nhà cung cấp dịch vụ không thể được xác định.


1
Tôi đã thêm READ_PHONE_STATEquyền nhưng tôi luôn nhận đượccallingSIM = -1
Alireza Noorali

@AlirezaNoorali thiết bị nào bạn đang sử dụng để kiểm tra. và bạn đang làm cho nó hoạt động trong các thiết bị Android 7 bên dưới?
droidev

Thiết bị là Samsung Galaxy S6 Android 7.0. Tôi không chắc chắn về các thiết bị Android 7 bên dưới
Alireza Noorali

Bạn có thể truy xuất simIds bình thường không? khi bạn không có cuộc gọi
droidev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.