简体   繁体   中英

android bluetooth :The method getSystemService(String) is undefined for the type BluetoothDevice

The method getSystemService(String) is undefined for the type BluetoothDevice

THE CLASS TelephonyInfo that accesses my sim cards on my phone is working

I want to use it to show the sim details on a device I'm connected to, I made some changes to include bluetooth, but I'm having a problem with the methodgetSystemService The method getSystemService(String) is undefined for the type BluetoothDevice , I found some similar questions but none were using bluetooth, I tried their solutions but it didn't work since I'm using bluetooth. Here's the code after I've made some changes

I'm using this class to show the Sim details of a bluetooth device I'm connected to, I have the class TelephonyInfo

public final class TelephonyInfo {

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

    public String getImeiSIM1() {
        return imeiSIM1;
    }

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

    public String getImeiSIM2() {
        return imeiSIM2;
    }

     /*public static void setImeiSIM2(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(BluetoothDevice bluetoothDevice){

        if(telephonyInfo == null) {

            telephonyInfo = new TelephonyInfo();

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

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

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

                try {
                    telephonyInfo.imeiSIM1 = getDeviceIdBySlot(bluetoothDevice,
                            "getDeviceId", 0);
                    telephonyInfo.imeiSIM2 = getDeviceIdBySlot(bluetoothDevice,
                            "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(bluetoothDevice,
                        "getSimStateGemini", 0);
                telephonyInfo.isSIM2Ready = getSIMStateBySlot(bluetoothDevice,
                        "getSimStateGemini", 1);
            } catch (GeminiMethodNotFoundException e) {

                e.printStackTrace();

                try {
                    telephonyInfo.isSIM1Ready = getSIMStateBySlot(bluetoothDevice,
                            "getSimState", 0);
                    telephonyInfo.isSIM2Ready = getSIMStateBySlot(bluetoothDevice,
                            "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(BluetoothDevice bluetoothDevice,
                                            String predictedMethodName, int slotID) throws
            GeminiMethodNotFoundException {

        String imei = null;

        TelephonyManager telephony = (TelephonyManager)
                bluetoothDevice.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(BluetoothDevice bluetoothDevice,
                                              String predictedMethodName, int slotID) throws
            GeminiMethodNotFoundException {

        boolean isReady = false;

        TelephonyManager telephony = (TelephonyManager)
                bluetoothDevice.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);
        }
    }


}

Can someone please help me solve this problem?

getSystemService() is a method of the class Context , so you'll need to run it on a context.

The original code you copied it from was probably meant to be run from an Activity -derived class. You need to pass a Context argument into your method if it's not inside an Activity.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM