অ্যান্ড্রয়েড: ফোনটি ডুয়াল সিম কিনা তা পরীক্ষা করে দেখুন


113

ফোরামে অনেক গবেষণা করার পরে, এখন আমি জানি যে দ্বৈত সিম ফোনে সিম কার্ডের জন্য আইএমএসআই বা সিম সিরিয়াল নম্বর পাওয়ার কোনও উপায় নেই (প্রস্তুতকারকের সাথে যোগাযোগ করা বাদে)। এখন আমার পরিবর্তিত প্রশ্ন হ'ল, আমরা কি আদৌ সনাক্ত করতে পারি যে ফোনে দুটি সিম রয়েছে? আমি বিশ্বাস করি এটি কিছু বুদ্ধি দিয়ে সনাক্ত করা যেতে পারে। আমি ভাবতে পারি যে কয়েকটি উপায়:

  1. একটি ইউএসএসডি কোড ডায়াল করা এবং আইএমইআই নম্বরটির জন্য লগগুলি সন্ধান করা (আমি ভারতে * 139 # দিয়ে এটি চেষ্টা করেছি It এটি কাজ করেছে)) এটি আমাকে সিমের জন্য আইএমইআই নম্বর দেবে যা থেকে আমি ইউএসএসডি কোডটি ডায়াল করেছি। (ধারণা করা হয় যে ফোনটি অ্যান্ড্রয়েড নির্দেশিকা অনুসরণ করে এবং দুটি আইএমইআই নম্বর রয়েছে))

  2. সিমের জন্য সিম সিরিয়াল নম্বর এবং / অথবা আইএমএসআই সংরক্ষণ করা হচ্ছে। এবং অন্য কোনও আইএমএসআই / সিরিয়াল নম্বর সনাক্ত করার পরেও ফোনটি পুনরায় চালু না করা হলেও (যেমন সিমটি স্যুইচ করা হয়েছিল) কিছু লগগুলি ট্রেস করে বা কিছু সম্প্রচার ইভেন্ট হ্যান্ডলিং দ্বারা।

  3. * 06 # ডায়াল করার মাধ্যমে আপনি উভয়ই IMEI নম্বর দেখতে পাবেন। কোনওভাবে, এই দুটি নম্বর পান। (স্ক্রিন ক্যাপচার এবং পাঠ্যের জন্য চিত্র বিশ্লেষণের মতো কিছু))

কেউ যদি অন্য কোনও উপায়ে চিন্তা করতে পারেন তবে সেগুলি সর্বাধিক স্বাগত। আমি সত্যিই এই সম্পর্কিত যে কোনও ধরনের প্রশংসা করব। এছাড়াও, কারও কাছে কোনও প্রস্তুতকারক এপিআই বা তাদের সাথে যোগাযোগের লিঙ্ক সম্পর্কে কোনও তথ্য থাকলে, দয়া করে সম্প্রদায়ের লোকদের সাথে ভাগ করুন।


হাই রাজকিরণ, শেষ পর্যন্ত সমাধানটি আমার পক্ষে কার্যকর হয়ে গেল। যারা মোবাইল অ্যাপ্লিকেশনগুলিতে ডুয়েল সিমটি পরিচালনা করতে চান তাদের জন্য এটি সহায়ক হবে আশা করি। দ্বৈত সিম হ্যান্ডেল এপিআই নথিভুক্ত নয়। দয়া করে আমার উত্তরটি আমার জন্য এটি কার্যকর কাজ করে দেখুন। stackoverflow.com/questions/17618651/...
Jebasuthan

1
ধন্যবাদ .. তবে আপনার উত্তর আমার প্রশ্নের উত্তর দেয় না। আমি দ্বিতীয় সিম এবং আইএমইআই সম্পর্কে সমস্ত বিবরণ চাই। @ পাইড পাইপারের উত্তর আমাকে সবকিছু পেতে সহায়তা করে।
রাজকিরণ

@ রাজকিরান পাইড পাইপারের উত্তর আপনাকে সত্যিই সাহায্য করেছিল? আমি তার কোডটি এম স্যামসাং গ্যালাক্সি ওয়াই ডুসে পরীক্ষা করে দেখেছি কিন্তু এটি কাজ করছে না you আপনি কি আমাকে দ্বৈত সিম ফোনের IMEI নম্বর খুঁজে পেতে সহায়তা করেছেন?
নীতীশ প্যাটেল

@ নিতিশপাটেল: হ্যাঁ অবশ্যই এটি সাহায্য করেছিল। দুর্ভাগ্যক্রমে আমার কাছে চেক করার জন্য ওয়াই ডুওস নেই। তবে আমি বিশ্বাস করি যে স্যামসুং অ্যান্ড্রয়েড সংস্করণ ৪.০ এর পরে ডুয়াল সিম পরিচালনা করার জন্য বিভিন্ন প্রক্রিয়া ব্যবহার করে। পাইড পাইপার্স এর উত্তর 4.0 পরবর্তী ডিভাইসগুলিতে সহায়তা করে। বিশ্রামের জন্য, আপনাকে প্রতিবিম্ব ব্যবহার করে আরও কিছু খনন করতে হবে।
রাজকিরান

হাই, আমি একটি সমাধান ... দয়া করে চেক করুন কোড খুঁজে stackoverflow.com/a/32304799/3131373 এটা বিভিন্ন ফোন পরীক্ষা করা হয়
user3131373

উত্তর:


184

আপডেট 23 মার্চ'15:

অফিশিয়াল একাধিক সিম এপিআই এখন অ্যান্ড্রয়েড 5.1 থেকে পাওয়া যাবে

অন্যান্য সম্ভাব্য বিকল্প:

আপনি উভয় আইএমইআই নম্বর পেতে জাভা প্রতিবিম্ব ব্যবহার করতে পারেন ।

এই আইএমইআই নম্বরগুলি ব্যবহার করে আপনি ফোনটি ডুয়াল সিম কিনা তা পরীক্ষা করে দেখতে পারেন।

নিম্নলিখিত ক্রিয়াকলাপ চেষ্টা করুন:

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" এর মতো পদ্ধতির অ্যাক্সেস পাওয়া ভবিষ্যদ্বাণী করে যে পদ্ধতিটি বিদ্যমান।

যদি সেই পদ্ধতির নামটি ডিভাইস প্রস্তুতকারকের দেওয়া কোনওটির সাথে মেলে না তবে এটি কাজ করবে না। আপনাকে সেই ডিভাইসের জন্য সংশ্লিষ্ট পদ্ধতির নামটি খুঁজে পেতে হবে।

অন্যান্য নির্মাতাদের জন্য পদ্ধতির নামগুলি জাভা প্রতিবিম্ব ব্যবহার করে নিম্নলিখিতভাবে করা যেতে পারে:

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

সম্পাদনা:

সীতা যেমন তার মন্তব্যে উল্লেখ করেছেন:

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

এটি তার জন্য কাজ করছে। তিনি স্যামসুং ডুওস ডিভাইসে দুটি সিমের জন্য দুটি আইএমইআই নম্বর পেতে সফল হয়েছিল।

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

সম্পাদনা 2:

ডেটা পুনরুদ্ধারের জন্য ব্যবহৃত পদ্ধতিটি লেনোভো এ 319 এবং সেই উত্পাদন দ্বারা নির্মিত অন্যান্য ফোনের জন্য (ক্রেডিট মেহের আবুত্রা ):

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

4
শান্ত! কার্বনে "গেটডেভাইসআইডি" নিয়ে এটি আমার পক্ষে কাজ করেছিল। স্যামসুং পদ্ধতিগুলি অনুসন্ধান করবে এবং আমার সাথে এটি থাকলে এখানে আপডেট হবে। ধন্যবাদ মানুষ. যশ।
রাজকিরণ

1
হ্যাঁ. এমনকি আমি এটা করেছি। স্যামসাং com.android.internal.telephony.RILConstants$SimCardIDঅভ্যন্তরীণভাবে ব্যবহার করে। এমনকি পদ্ধতিগুলির একই স্বাক্ষর এবং ভেরিয়েবলগুলির একই নাম সহ সেই শ্রেণিটি তৈরি করার চেষ্টা করেছিল। তবে ভাগ্য নেই। উত্স কোড পাওয়ার চেষ্টা করবে এবং চেক করার চেষ্টা করবে। ধন্যবাদ।
রাজকিরণ

4
আমি টেলিফোনিআইএনফো.ইমিআইএসআইএম 1 = গেটডভাইসআইবিবিস্লট (প্রসঙ্গ, "getDeviceIdDs", 0) ব্যবহার করি; টেলিফোনিআইএনফো.মেইআইএসআইএম = getDeviceIdBySlot (প্রসঙ্গ, "getDeviceIdDs", 1); এটা আমার জন্য কাজ করছে। আমি উভয় সিমের জন্য দুটি আইএমইআই নম্বর পেতে সফল হয়েছিলাম।
সিঠা 10

1
আমি কীভাবে সিম 2 এর ফোন নম্বর পেতে পারি? আমি টেলিফোন.জেটলাইন 1 নাম্বার () পদ্ধতিটি ব্যবহার করে সিম 1 নম্বর পাচ্ছি, পদ্ধতির তালিকায় আমি getLine2Number () বা getLine1Number (int)
ডিসিডার

4
ডিভাইসআইডি আইএমইআই আইএমএসআই নয়, তাই না?
ফ্যালকো

5

আমার কাছে অ্যান্ড্রয়েড 4.৪.৪ সহ একটি স্যামসুং ডুওস ডিভাইস রয়েছে এবং গৃহীত উত্তরে (যেমন গেটডেভাইসআইডিডি কল করুন) সীতার প্রস্তাবিত পদ্ধতিটি আমার পক্ষে কাজ করে না, কারণ পদ্ধতিটি বিদ্যমান নেই। নীচে দেখানো হিসাবে "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();
    }   
}

এছাড়াও, আমি কোডটি পুনরায় লিখলাম যা পুনরুদ্ধার করে এই তথ্যগুলি পুনরুদ্ধার করার জন্য পদ্ধতিগুলির জন্য পরীক্ষা করে যাতে এটি চেষ্টা / ধরা ক্রমের পরিবর্তে পদ্ধতি নামের একটি অ্যারে ব্যবহার করে। উদাহরণস্বরূপ, আমাদের দুটি সক্রিয় সিম রয়েছে কিনা তা নির্ধারণ করতে:

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

নেটওয়ার্ক অপারেটর চেক করার উপায় অনুসন্ধান করার সময় আমি বেশ কয়েকটি দেশীয় সমাধান পেয়েছি।

এপিআই> = 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();
    } 
}

অ্যান্ড্রয়েডমেনিস্টে অনুমতি যোগ করুন:

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

নেটওয়ার্ক অপারেটর পেতে আপনি এমসিসি এবং এমএনসি কোডগুলি পরীক্ষা করতে পারেন:

এপিআই> = 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();
}

এপিআই> = 23 এর জন্য। ফোনটি দ্বৈত / ট্রিপল / বহু সিম কিনা তা খতিয়ে দেখতে:

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

4

আমি ওয়ানপ্লাস 2 ফোন থেকে আইএমইআই উভয়ই পড়তে সক্ষম

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

ভাল যে এটি ওয়ান প্লাসে কাজ করে। তবে আপনাকে সমস্ত উত্তর এবং সমস্ত অ্যান্ড্রয়েড সংস্করণ (সম্ভবত) এর জন্য কাজ করে এমন উত্তরগুলি পোস্ট করার জন্য অনুরোধ করুন
রাজকিরান

1
এটি অফিসিয়াল এসডিকে। সমস্ত ফোনের জন্য কাজ করা উচিত। আমি এটি ওয়ানপ্লাস 2
স্বপ্নিল গডাম্বে

সুতরাং @ স্বপনিলের গৃহীত উত্তর একই জিনিসটি সঠিকভাবে বলে?
রাজকিরন

2

আমি কল লগগুলিতে এক নজরে নিচ্ছি এবং আমি লক্ষ্য করেছি যে ম্যানেজড কার্সারের সামগ্রীগুলিতে সাধারণ ক্ষেত্রগুলি বাদে ডুয়াল সিম ফোনে আমাদের একটি কলাম "সিমিড" রয়েছে (আমি জোলো এ 500 এস লাইটে পরীক্ষা করেছি), যাতে প্রতিটি কল ট্যাগ করতে পারি সিম সহ কল ​​লগ এ। এই মানটি হয় 1 বা 2, সম্ভবত সিম 1 / সিম 2 বোঝায়।

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

আমি এই কলামটি একটি একক সিম ফোনে খুঁজে পাইনি (আমি এক্স্পেরিয়া এল তে চেক করেছি)।

সুতরাং যদিও আমি মনে করি না যে এটি দ্বৈত সিম প্রকৃতি যাচাই করার জন্য এটি একটি নির্বোধ উপায়, তবে আমি এটি এখানে পোস্ট করছি কারণ এটি কারওর পক্ষে কার্যকর হতে পারে।


আপনি একটি ডিবি পড়ছেন, কোনটি? আপনি এখানে কি করছেন তা দয়া করে পরিষ্কার করুন। ( "পরিচিতি" সঞ্চিত ডিবি কোথায়?
not2qubit

1

পরামর্শ:

আপনি ব্যবহার করার চেষ্টা করতে পারেন

ctx.getSystemService("phone_msim")

পরিবর্তে

ctx.getSystemService(Context.TELEPHONY_SERVICE)

আপনি যদি ইতিমধ্যে বৈভবের উত্তরটি চেষ্টা করে থাকেন এবং telephony.getClass().getMethod()ব্যর্থ হন তবে উপরে আমার কোয়ালকম মোবাইলের জন্য কাজ করে ।


যতক্ষণ উত্তরটি সম্পূর্ণ হয় আপনি পরিপূরক তথ্যের জন্য অন্যান্য ভাষায় ওয়েব পৃষ্ঠাগুলিতে লিঙ্ক পোস্ট করতে পারেন। meta.stackoverflow.com/questions/271060/...
মাপক

এটি আসলে একটি দরকারী লিঙ্ক ছিল , এটি অপসারণ করার প্রয়োজন নেই।
not2qubit

0

আমি এই সিস্টেম বৈশিষ্ট্যগুলি স্যামসাং এস 8 এ পেয়েছি

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

এছাড়াও, উত্স অনুসারে: https : //android.googles Source.com / প্ল্যাটফর্ম / ফ্রেমওয়ার্কস / বেস /+ / মাস্টার / টেলিফনি / জাভা / কমড / অ্যান্ড্রয়েড / আন্তঃ / টেলিফনি / টেলিফনিপ্রপ্রেটিস.জভা

getprop persist.radio.multisim.configমাল্টি সিম এ " dsds" বা " dsda" প্রদান করে।

আমি স্যামসাং এস 8 এ এটি পরীক্ষা করেছি এবং এটি কাজ করে


কিছু মনে করো না. অ্যান্ড্রয়েডের ইতিমধ্যে এখন ডুয়াল সিমের জন্য এপিআই রয়েছে। developer.android.com/about/versions/android-5.1.html#multisim অন্য সব কিছুর জন্য, আপনি @vaibhav করে উপরের উত্তর পাঠাতে পারেন
Rajkiran

-1

3
ঠিক বলেছ. আমি জানি। তবে সে কারণেই আমি একদম চেষ্টা করতে চাই না। এবং কিছু থাকতে হবে। প্লে স্টোর থেকে ইউএসএসডিডুয়াল উইজেট অ্যাপ ব্যবহার করে দেখুন। এটি আসলে দুটি সিমের মধ্যে স্যুইচ করতে পারে। এমনকি কোডটি উল্টো করার চেষ্টা করেছিলেন ইঞ্জিনিয়ার, তবে ভাগ্য নেই।
রাজকিরান

এটি কি সমস্ত ডিভাইসে বা কেবল একটি সীমিত উপসেটে কাজ করে যা কিছু প্রকারের মালিকানাধীন ইন্টারফেসকে প্রকাশ করে?
গঞ্জোব্রায়েন

2
কেন এই উত্তর নিম্নচাপিত? এটি সঠিক উত্তর। ^
এন শর্মা

24
বহুবার কমন্সওয়্যার বলেছে যে এটি সম্ভব নয় যা অন্যান্য বিকাশকারীদের দ্বারা সম্ভব হয়েছে। সুতরাং, এটি এর মতো নয় যা কমন্সওয়্যার যা বলে তা সর্বদা সঠিক :-)
ললিত পপতানি

1
আপনি সঠিক হতে পারেন, তবে আমি মনে করি যে তিনি অ্যান্ড্রয়েড সমস্ত জিনিসের জন্য মোটামুটি বিশ্বাসযোগ্য সংস্থান। এই নির্দিষ্ট সমস্যা হিসাবে, অবশ্যই, আমি একই জিনিসটি করেছি এবং ডুয়াল সিমের ডেটা পাওয়ার জন্য প্রতিবিম্ব ব্যবহার করেছি, তবে এটি আমার বিশেষ ডিভাইসের জন্য ছিল। আজ অবধি, আমি এখনও বিশ্বাস করি না যে এটি করার কোনও সাধারণ উপায় আছে। এছাড়াও লক্ষ্য করুন যে আমি গুগল বিকাশকারীকেও উদ্ধৃত করেছি এবং কেবল কমন্সওয়্যার নয়।
গঞ্জোব্রাইনগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.