Android: ตรวจสอบว่าโทรศัพท์เป็นสองซิมหรือไม่


113

หลังจากค้นคว้าข้อมูลมากมายเกี่ยวกับฟอรัมตอนนี้ฉันรู้แล้วว่าไม่มีวิธีค้นหาหมายเลขประจำเครื่อง IMSI หรือ SIM สำหรับทั้งสองซิมการ์ดในโทรศัพท์สองซิม (ยกเว้นการติดต่อผู้ผลิต) ตอนนี้คำถามที่เปลี่ยนไปของฉันคือเราสามารถตรวจจับได้หรือไม่ว่าโทรศัพท์มีสองซิม? ฉันเชื่อว่ามันสามารถตรวจพบได้ด้วยสติปัญญาบางอย่าง มีไม่กี่วิธีที่ฉันคิดได้คือ:

  1. กดรหัส USSD และติดตามบันทึกสำหรับหมายเลข IMEI (ฉันลองใช้ * 139 # ในอินเดียแล้วมันได้ผล) สิ่งนี้จะให้หมายเลข IMEI สำหรับซิมที่ฉันหมุนรหัส USSD (สันนิษฐานว่าโทรศัพท์เป็นไปตามหลักเกณฑ์ของ Android และมีหมายเลข IMEI สองหมายเลข)

  2. การจัดเก็บหมายเลขซีเรียลของซิมและ / หรือ IMSI สำหรับซิม และหลังจากตรวจพบ IMSI / หมายเลขซีเรียลอื่น ๆ แม้ว่าโทรศัพท์จะไม่ได้รีบูต (เช่นมีการสลับซิม) โดยการติดตามบันทึกบางอย่างหรือโดยการจัดการเหตุการณ์การออกอากาศบางอย่าง

  3. เมื่อกด * 06 # คุณจะเห็นหมายเลข IMEI ทั้งสองหมายเลข ยังไงก็ตามรับสองจำนวนนั้น (บางอย่างเช่นการจับภาพหน้าจอและการแยกวิเคราะห์ภาพสำหรับข้อความ)

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


สวัสดี Rajkiran ในที่สุดฉันก็ได้วิธีแก้ปัญหาที่ใช้งานได้ดีสำหรับฉัน หวังว่าจะเป็นประโยชน์สำหรับทุกคนที่ต้องการจัดการ Duel SIM ในแอปพลิเคชันมือถือ API ของ Duel SIM handle ไม่ได้รับการจัดทำเป็นเอกสาร โปรดตรวจสอบคำตอบของฉันว่ามันทำงานได้ดีสำหรับฉัน stackoverflow.com/questions/17618651/…
Jebasuthan

1
ขอบคุณ .. แต่คำตอบของคุณไม่ตอบคำถามของฉัน ฉันต้องการรายละเอียดทั้งหมดเกี่ยวกับซิมที่สองและ IMEI คำตอบของ @Pied Piper ช่วยให้ฉันได้รับทุกสิ่ง
Rajkiran

คำตอบของ @Rajkiran Pied Piper ช่วยคุณได้จริงเหรอ? ฉันตรวจสอบรหัสของเขาใน m samsung galaxy y duos แล้ว แต่มันใช้ไม่ได้คุณช่วยฉันหา IMEI nos ของโทรศัพท์สองซิมได้ไหม
Nitish Patel

@nitishpatel: ใช่แน่นอนมันช่วยได้ น่าเสียดายที่ฉันไม่มี Y Duos ให้ตรวจสอบ แต่ฉันเชื่อว่า Samsung ใช้กลไกที่แตกต่างกันสำหรับการจัดการสองซิมบน Android เวอร์ชัน 4.0 เป็นต้นไป คำตอบ Pied Pipers ช่วยในอุปกรณ์ 4.0 เป็นต้นไป ส่วนที่เหลือคุณจะต้องขุดอีกเล็กน้อยโดยใช้การสะท้อน
Rajkiran

สวัสดีฉันพบวิธีแก้ไข ... โปรดตรวจสอบรหัสstackoverflow.com/a/32304799/3131373 มีการทดสอบบนโทรศัพท์หลายรุ่น
user3131373

คำตอบ:


184

อัปเดต 23 มีนาคม 2558:

API หลายซิมอย่างเป็นทางการพร้อมใช้งานแล้วตั้งแต่ Android 5.1 เป็นต้นไป

ตัวเลือกอื่น ๆ ที่เป็นไปได้:

คุณสามารถใช้การสะท้อนของ Javaเพื่อรับทั้งหมายเลข IMEI

เมื่อใช้หมายเลข IMEI เหล่านี้คุณสามารถตรวจสอบได้ว่าโทรศัพท์เป็น DUAL SIM หรือไม่

ลองทำกิจกรรมต่อไปนี้:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TelephonyInfo telephonyInfo = TelephonyInfo.getInstance(this);

        String imeiSIM1 = telephonyInfo.getImsiSIM1();
        String imeiSIM2 = telephonyInfo.getImsiSIM2();

        boolean isSIM1Ready = telephonyInfo.isSIM1Ready();
        boolean isSIM2Ready = telephonyInfo.isSIM2Ready();

        boolean isDualSIM = telephonyInfo.isDualSIM();

        TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText(" IME1 : " + imeiSIM1 + "\n" +
                " IME2 : " + imeiSIM2 + "\n" +
                " IS DUAL SIM : " + isDualSIM + "\n" +
                " IS SIM1 READY : " + isSIM1Ready + "\n" +
                " IS SIM2 READY : " + isSIM2Ready + "\n");
    }
}

และนี่คือTelephonyInfo.java:

import java.lang.reflect.Method;

import android.content.Context;
import android.telephony.TelephonyManager;

public final class TelephonyInfo {

    private static TelephonyInfo telephonyInfo;
    private String imeiSIM1;
    private String imeiSIM2;
    private boolean isSIM1Ready;
    private boolean isSIM2Ready;

    public String getImsiSIM1() {
        return imeiSIM1;
    }

    /*public static void setImsiSIM1(String imeiSIM1) {
        TelephonyInfo.imeiSIM1 = imeiSIM1;
    }*/

    public String getImsiSIM2() {
        return imeiSIM2;
    }

    /*public static void setImsiSIM2(String imeiSIM2) {
        TelephonyInfo.imeiSIM2 = imeiSIM2;
    }*/

    public boolean isSIM1Ready() {
        return isSIM1Ready;
    }

    /*public static void setSIM1Ready(boolean isSIM1Ready) {
        TelephonyInfo.isSIM1Ready = isSIM1Ready;
    }*/

    public boolean isSIM2Ready() {
        return isSIM2Ready;
    }

    /*public static void setSIM2Ready(boolean isSIM2Ready) {
        TelephonyInfo.isSIM2Ready = isSIM2Ready;
    }*/

    public boolean isDualSIM() {
        return imeiSIM2 != null;
    }

    private TelephonyInfo() {
    }

    public static TelephonyInfo getInstance(Context context){

        if(telephonyInfo == null) {

            telephonyInfo = new TelephonyInfo();

            TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));

            telephonyInfo.imeiSIM1 = telephonyManager.getDeviceId();;
            telephonyInfo.imeiSIM2 = null;

            try {
                telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceIdGemini", 0);
                telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceIdGemini", 1);
            } catch (GeminiMethodNotFoundException e) {
                e.printStackTrace();

                try {
                    telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceId", 0);
                    telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceId", 1);
                } catch (GeminiMethodNotFoundException e1) {
                    //Call here for next manufacturer's predicted method name if you wish
                    e1.printStackTrace();
                }
            }

            telephonyInfo.isSIM1Ready = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
            telephonyInfo.isSIM2Ready = false;

            try {
                telephonyInfo.isSIM1Ready = getSIMStateBySlot(context, "getSimStateGemini", 0);
                telephonyInfo.isSIM2Ready = getSIMStateBySlot(context, "getSimStateGemini", 1);
            } catch (GeminiMethodNotFoundException e) {

                e.printStackTrace();

                try {
                    telephonyInfo.isSIM1Ready = getSIMStateBySlot(context, "getSimState", 0);
                    telephonyInfo.isSIM2Ready = getSIMStateBySlot(context, "getSimState", 1);
                } catch (GeminiMethodNotFoundException e1) {
                    //Call here for next manufacturer's predicted method name if you wish
                    e1.printStackTrace();
                }
            }
        }

        return telephonyInfo;
    }

    private static String getDeviceIdBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException {

        String imei = null;

        TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        try{

            Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

            Class<?>[] parameter = new Class[1];
            parameter[0] = int.class;
            Method getSimID = telephonyClass.getMethod(predictedMethodName, parameter);

            Object[] obParameter = new Object[1];
            obParameter[0] = slotID;
            Object ob_phone = getSimID.invoke(telephony, obParameter);

            if(ob_phone != null){
                imei = ob_phone.toString();

            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new GeminiMethodNotFoundException(predictedMethodName);
        }

        return imei;
    }

    private static  boolean getSIMStateBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException {

        boolean isReady = false;

        TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        try{

            Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

            Class<?>[] parameter = new Class[1];
            parameter[0] = int.class;
            Method getSimStateGemini = telephonyClass.getMethod(predictedMethodName, parameter);

            Object[] obParameter = new Object[1];
            obParameter[0] = slotID;
            Object ob_phone = getSimStateGemini.invoke(telephony, obParameter);

            if(ob_phone != null){
                int simState = Integer.parseInt(ob_phone.toString());
                if(simState == TelephonyManager.SIM_STATE_READY){
                    isReady = true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new GeminiMethodNotFoundException(predictedMethodName);
        }

        return isReady;
    }


    private static class GeminiMethodNotFoundException extends Exception {

        private static final long serialVersionUID = -996812356902545308L;

        public GeminiMethodNotFoundException(String info) {
            super(info);
        }
    }
}

แก้ไข:

การเข้าถึงวิธีการเช่น "getDeviceIdGemini" สำหรับรายละเอียดของช่องใส่ซิมอื่นมีการคาดเดาว่ามีวิธีการดังกล่าว

หากชื่อวิธีการนั้นไม่ตรงกับชื่อที่ผู้ผลิตอุปกรณ์กำหนดไว้ก็จะใช้ไม่ได้ คุณต้องหาชื่อวิธีการที่สอดคล้องกันสำหรับอุปกรณ์เหล่านั้น

การค้นหาชื่อเมธอดสำหรับผู้ผลิตรายอื่นสามารถทำได้โดยใช้การสะท้อนของ Java ดังนี้:

public static void printTelephonyManagerMethodNamesForThisDevice(Context context) {

    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    Class<?> telephonyClass;
    try {
        telephonyClass = Class.forName(telephony.getClass().getName());
        Method[] methods = telephonyClass.getMethods();
        for (int idx = 0; idx < methods.length; idx++) {

            System.out.println("\n" + methods[idx] + " declared by " + methods[idx].getDeclaringClass());
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
} 

แก้ไข:

ดังที่Seethaชี้ให้เห็นในความคิดเห็นของเธอ:

telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceIdDs", 0);
telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceIdDs", 1); 

มันทำงานให้เธอ เธอประสบความสำเร็จในการรับหมายเลข IMEI สองหมายเลขสำหรับทั้งสองซิมในอุปกรณ์ Samsung Duos

เพิ่ม <uses-permission android:name="android.permission.READ_PHONE_STATE" />

แก้ไข 2:

วิธีการที่ใช้ในการดึงข้อมูลใช้สำหรับ Lenovo A319 และโทรศัพท์รุ่นอื่น ๆ ตามการผลิตนั้น (Credit Maher Abuthraa ):

telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getSimSerialNumberGemini", 0); 
telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getSimSerialNumberGemini", 1); 

4
เย็น! นั่นใช้ได้ผลสำหรับฉันกับ "getDeviceId" บน Karbonn จะค้นหาวิธีการของ Samsung และจะอัปเดตที่นี่เมื่อฉันมีกับฉัน ขอบคุณคน ความรุ่งโรจน์
Rajkiran

1
ใช่. แม้แต่ฉันก็ทำอย่างนั้น พบว่าซัมซุงใช้com.android.internal.telephony.RILConstants$SimCardIDภายใน. แม้กระทั่งพยายามสร้างคลาสนั้นด้วยลายเซ็นเดียวกันของวิธีการและชื่อตัวแปรเดียวกัน แต่ไม่มีโชค จะลองรับซอร์สโค้ดและจะพยายามตรวจสอบ ขอบคุณ
Rajkiran

4
ฉันใช้ telephonyInfo.imeiSIM1 = getDeviceIdBySlot (บริบท "getDeviceIdDs", 0); telephonyInfo.imeiSIM2 = getDeviceIdBySlot (บริบท, "getDeviceIdDs", 1); มันทำงานให้ฉัน ฉันได้รับหมายเลข IMEI สองหมายเลขสำหรับทั้งสองซิมสำเร็จ
Seetha

1
ฉันจะรับหมายเลขโทรศัพท์ของ SIM2 ได้อย่างไร? ฉันได้รับหมายเลข SIM1 โดยใช้เมธอด telephony.getLine1Number () ในรายการเมธอดฉันไม่พบวิธีการเช่น getLine2Number () หรือ getLine1Number (int)
DCoder

4
deviceId คือ IMEI ไม่ใช่ IMSI ใช่หรือไม่
falko

5

ฉันมีอุปกรณ์ Samsung Duos ที่ใช้ Android 4.4.4 และวิธีการที่ Seetha แนะนำในคำตอบที่ยอมรับ (เช่นโทร getDeviceIdDs) ใช้ไม่ได้สำหรับฉันเนื่องจากไม่มีวิธีการนี้ ฉันสามารถกู้คืนข้อมูลทั้งหมดที่ต้องการได้โดยเรียกเมธอด "getDefault (int slotID)" ดังที่แสดงด้านล่าง:

public static void samsungTwoSims(Context context) {
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

    try{

        Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

        Class<?>[] parameter = new Class[1];
        parameter[0] = int.class;
        Method getFirstMethod = telephonyClass.getMethod("getDefault", parameter);

        Log.d(TAG, getFirstMethod.toString());

        Object[] obParameter = new Object[1];
        obParameter[0] = 0;
        TelephonyManager first = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

        Log.d(TAG, "Device Id: " + first.getDeviceId() + ", device status: " + first.getSimState() + ", operator: " + first.getNetworkOperator() + "/" + first.getNetworkOperatorName());

        obParameter[0] = 1;
        TelephonyManager second = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

        Log.d(TAG, "Device Id: " + second.getDeviceId() + ", device status: " + second.getSimState()+ ", operator: " + second.getNetworkOperator() + "/" + second.getNetworkOperatorName());
    } catch (Exception e) {
        e.printStackTrace();
    }   
}

นอกจากนี้ฉันเขียนโค้ดใหม่ที่ทดสอบวิธีการกู้คืนข้อมูลนี้ซ้ำ ๆ เพื่อให้ใช้อาร์เรย์ของชื่อเมธอดแทนลำดับของ try / catch ตัวอย่างเช่นเพื่อตรวจสอบว่าเรามีสองซิมที่ใช้งานได้หรือไม่เราสามารถทำได้:

private static String[] simStatusMethodNames = {"getSimStateGemini", "getSimState"};


public static boolean hasTwoActiveSims(Context context) {
    boolean first = false, second = false;

    for (String methodName: simStatusMethodNames) {
        // try with sim 0 first
        try {
            first = getSIMStateBySlot(context, methodName, 0);
            // no exception thrown, means method exists
            second = getSIMStateBySlot(context, methodName, 1);
           return first && second;
        } catch (GeminiMethodNotFoundException e) {
            // method does not exist, nothing to do but test the next
        }
    }
    return false;
}

ด้วยวิธีนี้หากมีการแนะนำชื่อเมธอดใหม่สำหรับอุปกรณ์บางเครื่องคุณสามารถเพิ่มลงในอาร์เรย์และมันก็น่าจะใช้ได้


4

มีโซลูชันเนทีฟหลายอย่างที่ฉันพบขณะค้นหาวิธีตรวจสอบผู้ให้บริการเครือข่าย

สำหรับ API> = 17:

TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

// Get information about all radio modules on device board
// and check what you need by calling #getCellIdentity.

final List<CellInfo> allCellInfo = manager.getAllCellInfo();
for (CellInfo cellInfo : allCellInfo) {
    if (cellInfo instanceof CellInfoGsm) {
        CellIdentityGsm cellIdentity = ((CellInfoGsm) cellInfo).getCellIdentity();
        //TODO Use cellIdentity to check MCC/MNC code, for instance.
    } else if (cellInfo instanceof CellInfoWcdma) {
        CellIdentityWcdma cellIdentity = ((CellInfoWcdma) cellInfo).getCellIdentity();
    } else if (cellInfo instanceof CellInfoLte) {
        CellIdentityLte cellIdentity = ((CellInfoLte) cellInfo).getCellIdentity();
    } else if (cellInfo instanceof CellInfoCdma) {
        CellIdentityCdma cellIdentity = ((CellInfoCdma) cellInfo).getCellIdentity();
    } 
}

ใน AndroidManifest เพิ่มสิทธิ์:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>

ในการรับผู้ให้บริการเครือข่ายคุณสามารถตรวจสอบรหัส mcc และ mnc:

สำหรับ API> = 22:

final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) {
    final CharSequence carrierName = subscriptionInfo.getCarrierName();
    final CharSequence displayName = subscriptionInfo.getDisplayName();
    final int mcc = subscriptionInfo.getMcc();
    final int mnc = subscriptionInfo.getMnc();
    final String subscriptionInfoNumber = subscriptionInfo.getNumber();
}

สำหรับ API> = 23 หากต้องการตรวจสอบว่าโทรศัพท์เป็นแบบสอง / สาม / หลายซิม:

TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (manager.getPhoneCount() == 2) {
    // Dual sim
}

4

ฉันสามารถอ่านทั้ง IMEI จาก OnePlus 2 Phone ได้

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                TelephonyManager manager = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
                Log.i(TAG, "Single or Dual Sim " + manager.getPhoneCount());
                Log.i(TAG, "Default device ID " + manager.getDeviceId());
                Log.i(TAG, "Single 1 " + manager.getDeviceId(0));
                Log.i(TAG, "Single 2 " + manager.getDeviceId(1));
            }

ดีที่ใช้งานได้กับ One Plus แต่ขอให้คุณโพสต์คำตอบที่ใช้ได้กับโทรศัพท์ทุกรุ่นและ Android ทุกรุ่น (อาจ)
Rajkiran

1
นี่คือ SDK อย่างเป็นทางการ ควรใช้งานได้กับโทรศัพท์ทุกรุ่น ฉันได้ทดสอบบน OnePlus 2
Swapnil Godambe

ดังนั้นคำตอบที่ได้รับการยอมรับจาก @Swapnil ก็บอกสิ่งเดียวกันใช่ไหม
Rajkiran

2

ฉันดูบันทึกการโทรและสังเกตเห็นว่านอกเหนือจากฟิลด์ปกติในเนื้อหาของagedCursorแล้วเรายังมีคอลัมน์ "simid" ในโทรศัพท์แบบ Dual SIM (ฉันตรวจสอบใน Xolo A500s Lite) เพื่อที่จะแท็กการโทรแต่ละครั้ง ในบันทึกการโทรด้วยซิม ค่านี้เป็น 1 หรือ 2 ซึ่งส่วนใหญ่อาจหมายถึง SIM1 / SIM2

managedCursor = context.getContentResolver().query(contacts, null, null, null, null);
managedCursor.moveToNext();        
for(int i=0;i<managedCursor.getColumnCount();i++)
{//for dual sim phones
    if(managedCursor.getColumnName(i).toLowerCase().equals("simid"))
        indexSIMID=i;
}

ฉันไม่พบคอลัมน์นี้ในโทรศัพท์ซิมเดียว (ฉันตรวจสอบกับ Xperia L)

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


คุณกำลังอ่าน DB อันไหน? โปรดชี้แจงว่าคุณกำลังทำอะไรที่นี่ (ฐานข้อมูล "รายชื่อติดต่อ" เก็บไว้ที่ไหน
not2qubit

1

เคล็ดลับ:

คุณสามารถลองใช้

ctx.getSystemService("phone_msim")

แทน

ctx.getSystemService(Context.TELEPHONY_SERVICE)

หากคุณได้ลองคำตอบของ Vaibhav แล้วและtelephony.getClass().getMethod()ล้มเหลวด้านบนคือสิ่งที่ใช้ได้กับมือถือQualcommของฉัน


ตราบใดที่คำตอบสมบูรณ์คุณสามารถโพสต์ลิงก์ไปยังหน้าเว็บในภาษาอื่นเพื่อดูข้อมูลเพิ่มเติมได้ meta.stackoverflow.com/questions/271060/...
จักร

นั่นเป็นลิงค์ที่มีประโยชน์จริงๆไม่จำเป็นต้องลบออก
not2qubit

0

ฉันพบคุณสมบัติของระบบเหล่านี้ใน Samsung S8

SystemProperties.getInt("ro.multisim.simslotcount", 1) > 1

ตามแหล่งที่มา: https://android.googlesource.com/platform/frameworks/base/+/master/telephony/java/com/android/internal/telephony/TelephonyProperties.java

getprop persist.radio.multisim.configส่งคืน " dsds" หรือ " dsda" ในหลายซิม

ฉันได้ทดสอบสิ่งนี้กับ Samsung S8 แล้วและใช้งานได้


ไม่เป็นไร. Android มี API สำหรับสองซิมแล้ว developer.android.com/about/versions/android-5.1.html#multisim สำหรับอย่างอื่นคุณสามารถอ้างถึงคำตอบข้างต้นโดย @vaibhav
Rajkiran

-1

Commonsware บอกว่านี่เป็นไปไม่ได้ โปรดดูสิ่งต่อไปนี้:

ไม่สามารถตรวจจับซิมคู่โดยใช้ Android SDK ได้

นี่คือบทสนทนาเพิ่มเติมเกี่ยวกับเรื่องนี้:

ทีมนักพัฒนา Google บอกว่าตรวจจับซิมคู่โดยใช้ Android SDK ไม่ได้


3
ใช่ผู้ชาย. ฉันรู้แล้ว. แต่นั่นเป็นเหตุผลที่ฉันพยายามหาวิธีแก้ปัญหา และจะต้องมีบางอย่าง ลองใช้แอพ USSDDualWidget จาก Play Store มันสามารถสลับไปมาระหว่างสองซิมได้จริงๆ แม้จะพยายามทำวิศวกรรมย้อนกลับรหัส แต่ไม่มีโชค
Rajkiran

มันทำงานบนอุปกรณ์ทั้งหมดหรือเป็นเพียงส่วนย่อยที่ จำกัด ที่เปิดเผยอินเทอร์เฟซที่เป็นกรรมสิทธิ์บางประเภท?
gonzobrains

2
ทำไมคำตอบนี้จึงถูกโหวตลง? นี่คือคำตอบที่ถูกต้อง ^
N Sharma

24
หลายครั้งที่คอมมอนแวร์ได้กล่าวว่าเป็นไปไม่ได้ซึ่งนักพัฒนารายอื่นได้ทำให้เป็นไปได้ ดังนั้นมันจึงไม่เหมือนกับสิ่งที่คอมมอนแวร์พูดว่าถูกเสมอ :-)
Lalit Poptani

1
คุณอาจจะถูกต้อง แต่ฉันคิดว่าเขาเป็นแหล่งข้อมูลที่ค่อนข้างน่าเชื่อถือสำหรับทุกสิ่งที่ Android สำหรับปัญหาเฉพาะนี้แน่นอนฉันได้ทำสิ่งเดียวกันและใช้การสะท้อนเพื่อรับข้อมูลสองซิม แต่เป็นสำหรับอุปกรณ์เฉพาะของฉัน จนถึงทุกวันนี้ฉันยังไม่เชื่อว่าจะมีวิธีทั่วไปในการทำเช่นนี้ นอกจากนี้โปรดสังเกตว่าฉันอ้างถึงนักพัฒนาซอฟต์แวร์ของ Google เช่นกันไม่ใช่แค่ Commonsware
gonzobrains
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.