2011-11-03 38 views
19

Tôi muốn phát hiện xem có hai thẻ SIM có trong điện thoại Android dual-SIM của tôi theo chương trình hay không. Tôi tìm thấy một API (TelephonyManager.getSIMState()), nhưng nó là dành cho điện thoại đơn SIM bình thường. Có bất kỳ API nào để phát hiện xem hai SIM có được lắp vào điện thoại dual-SIM của tôi không?Phát hiện trạng thái của hai thẻ SIM trong điện thoại Android dual-SIM

+1

[Đây là giải pháp đầy đủ cho những gì bạn đang tìm kiếm] (http://stackoverflow.com/a/17499889/703851) –

+0

sử dụng Cố gắng thư viện Multisim: http://stackoverflow.com/a/41544422/1665964 –

Trả lời

29

Android không hỗ trợ nhiều SIM, ít nhất là từ SDK. Các nhà sản xuất thiết bị đã tạo thiết bị nhiều SIM đang tự làm như vậy. Bạn có thể liên hệ với nhà sản xuất thiết bị của mình và xem họ có tiện ích SDK hay thứ gì đó cho phép bạn truy cập vào SIM thứ hai hay không.

Edit:(15 tháng 7 năm 2015)

Kể từ API 22, bạn có thể kiểm tra cho nhiều SIM sử dụng SubscriptionManager 's phương pháp getActiveSubscriptionInfoList(). Chi tiết khác trên Android Docs.

+4

Nó sẽ là tốt hơn để đề cập đến phiên bản SDK được đề cập trong câu trả lời. Khi câu trả lời này được xem sau nhiều năm, tuyên bố được đưa ra có thể gây hiểu nhầm. – Narayanan

+0

Từ Android 5.2 trở đi, android bắt đầu hỗ trợ nhiều điện thoại di động sim! – Saty

+0

có một số cách để phát hiện sim kép thông qua phản ánh java, có chính thức không thể, nhưng trong hầu hết các trường hợp có một số hack, xem: http://stackoverflow.com/questions/14517338/android-check-whether-the-phone -is-dual-sim –

1

Vâng, đây không phải là bằng chứng đánh lừa. Nhưng nếu bạn có hai SIM mà là trên hai nhà khai thác mạng khác nhau mà bạn có thể thử một cái gì đó như thế này:

PhoneServiceStateListener listener = new PhoneServiceStateListener(this); 
tm.listen(listener, PhoneStateListener.LISTEN_SERVICE_STATE); 


. 
. 
. 
class PhoneServiceStateListener extends PhoneStateListener { 
Context context = null; 

public PhoneServiceStateListener(Context context) { 
    this.context = context; 
} 

public PhoneServiceStateListener() { 
} 

@Override 
public void onServiceStateChanged(ServiceState serviceState) { 

    if (serviceState.getState() == ServiceState.STATE_IN_SERVICE) { 
     //You get this event when your SIM is in service. 
     //If you get this event twice, chances are more that your phone is Dual SIM. 
     //Alternatively, you can toggle Flight Mode programmatically twice so 
     //that you'll get service state changed event. 
    } 
    super.onServiceStateChanged(serviceState); 
} 

} 

Lý tưởng nhất là bạn sẽ nhận được trạng thái dịch vụ SIM thay đổi sự kiện cho cả hai thẻ SIM và sau đó bạn có thể kiểm tra tên nhà điều hành mạng hoặc một cái gì đó như thế để kiểm tra xem bạn có hai thẻ SIM hay không. Nhưng bạn cần phải có hai thẻ SIM chạy trên hai mạng khác nhau.

+1

Làm cách nào để phân biệt thẻ SIM nào đang hoạt động? – gonzobrains

+0

@gonzobrains: Rất tiếc, cảm ơn vì đã thông báo. Đã cập nhật câu trả lời. – Rajkiran

3

Từ bây giờ, nếu điện thoại được hỗ trợ MTK, bạn có thể sử dụng lớp TelephonyManagerEx từ MediaTek SDK.

Hãy xem the docs.

+0

Có thể có [chi nhánh bcm_ds] (https://code.google.com/p/android/issues/detail?id=14799#c26) hoặc SDK MediaTek là tiêu chuẩn trong [Android One] (https: //en.wikipedia .org/wiki/Android_One). Cả hai [thêm] (https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/b09babbf321c225b14abb013a6e1ed7041c45d06/src/com/android/providers/telephony/SmsProvider.java#275) 'SmsManager.getDefault (slotId) 'API. Ra mắt cùng một tiêu chuẩn sim kép trong Android One và MediaTek SDK và là đối tác. Tính năng nâng cao [đã đóng "lỗi thời"] (https://code.google.com/p/android/issues/detail?id=14799#c27). –

+0

Có điều này rất hữu ích –

0
final SubscriptionManager subscriptionManager = SubscriptionManager.from(getApplicationContext()); 
    final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList(); 
    int simCount = activeSubscriptionInfoList.size(); 
    btnBack.setText(simCount+" Sim available"); 
    Log.d("MainActivity: ","simCount:" +simCount); 

    for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) { 
     Log.d("MainActivity: ","iccId :"+ subscriptionInfo.getIccId()+" , name : "+ subscriptionInfo.getDisplayName()); 
    } 
Các vấn đề liên quan