Android手机的设备信息获取

作者: 倔强的炉包 | 来源:发表于2018-03-16 13:50 被阅读34次

    最近在适配Android手机与蓝牙的通信,需要Android通过socket机制的网络通信,整理了了一些获取设备信息的参数。

    • 获取MEID
    public static String getMeid(Context context) {
            TelephonyManager telephonyMgr = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
            return telephonyMgr.getDeviceId();
     }
    
    • 获取ICCID
     public static String getIccid(Context context) {
            TelephonyManager telephonyMgr = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
            return telephonyMgr.getSimSerialNumber();
     }
    
    • 获取IMSI
    public static String getIMSI(Context context) {
            TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            return mTelephonyMgr.getSubscriberId();
     }
    
    • 获取手机网络类型
    public static String getPhoneType(Context context) {
            TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            int networkType = tm.getNetworkType();
            if (networkType == NETWORK_TYPE_GSM) {
                return "GSM";
            } else if (networkType == NETWORK_TYPE_GPRS) {
                return "GPRS";
            } else if (networkType == NETWORK_TYPE_EDGE) {
                return "EDGE";
            } else if (networkType == NETWORK_TYPE_HSUPA) {
                return "HSUPA";
            } else if (networkType == NETWORK_TYPE_HSDPA) {
                return "HSDPA";
            } else if (networkType == NETWORK_TYPE_UMTS) {
                return "WCDMA";
            }
            return "";
    }
    
    • 获取基站信息CDMA
      public static String getBts(Context context) {
            TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            final CellLocation cellLocation = mTelephonyManager.getCellLocation();
            if (cellLocation instanceof CdmaCellLocation) {
                CdmaCellLocation cdmaCellLocation = (CdmaCellLocation) cellLocation;
                int sid = cdmaCellLocation.getSystemId();
                int nid = cdmaCellLocation.getNetworkId();
                int bid = cdmaCellLocation.getBaseStationId();
                int lon = cdmaCellLocation.getBaseStationLongitude();
                int lat = cdmaCellLocation.getBaseStationLatitude();
                return sid + "," + nid + "," + bid + "," + lon + "," + lat + ",";
            }
            return "";
    }
    
    • 获取周边的基站信息CDMA
    public static String getBaseData(final Context mContext) {
            List<CellInfo> infoLists = telephonyManager.getAllCellInfo();
            StringBuilder sb = new StringBuilder();
            if (infoLists != null && infoLists.size() != 0) {
                for (CellInfo info : infoLists) {
                    /** 1、GSM是通用的移动联通电信2G的基站。
                     2、CDMA是3G的基站。
                     3、LTE,则证明支持4G的基站。*/
                    if (info.toString().contains("CellInfoCdma")) {
                        CellInfoCdma cellInfoCdma = (CellInfoCdma) info;
                        CellIdentityCdma cellIdentityCdma = cellInfoCdma
                                .getCellIdentity();
                        CellSignalStrengthCdma cellSignalStrengthCdma = cellInfoCdma
                                .getCellSignalStrength();
                        sb.append(cellIdentityCdma.getSystemId() + "," +
                                cellIdentityCdma.getNetworkId() + "," +
                                cellIdentityCdma.getBasestationId() + "," +
                                cellIdentityCdma.getLongitude() + "," +
                                cellIdentityCdma.getLatitude() + "," + cellSignalStrengthCdma.getCdmaDbm() + "|");
                    }
                }
            }
            if (sb.toString().length() > 0) {
                return sb.toString().substring(0, sb.toString().length() - 1);
            }
            return sb.toString();
     }
    
    • 获取当前连接的Wifi
    public static String getWifiInfo(Context context) {
            WifiManager wifi_service = (WifiManager) context.getSystemService(WIFI_SERVICE);
            WifiInfo wifiInfo = wifi_service.getConnectionInfo();
            if (wifiInfo != null) {
                String mac = wifiInfo.getMacAddress();
                int signal = wifiInfo.getRssi();
                String ssid = wifiInfo.getSSID();
                return mac + "," + signal + "," + ssid;
            }
            return "";
    }
    
    • 获取扫描到的Wifis
     public static String getWifiData(final Context mContext) {
            WifiManager wifiManager = (WifiManager) mContext
                    .getSystemService(Context.WIFI_SERVICE);
            List<ScanResult> list = wifiManager.getScanResults();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < list.size(); i++) {
                sb.append(bean.getMac_address())
                        .append(",")
                        .append(bean.getSignal_strength())
                        .append(",")
                        .append(bean.getWifi_name())
                        .append("|");
            }
            if (sb.toString().length() > 0) {
                return sb.toString().substring(0, sb.toString().length() - 1);
            }
            return sb.toString();
    }
    
    • 获取mac
      public static String getMac() {
            String macSerial = null;
            String str = "";
    
            try {
                Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ");
                InputStreamReader ir = new InputStreamReader(pp.getInputStream());
                LineNumberReader input = new LineNumberReader(ir);
    
                for (; null != str; ) {
                    str = input.readLine();
                    if (str != null) {
                        macSerial = str.trim();// 去空格
                        break;
                    }
                }
            } catch (IOException ex) {
                // 赋予默认值
                ex.printStackTrace();
            }
            return macSerial;
    }
    
    • 定位并获取卫星数量
    private int atellitessNum = 0;
    public Location getLocation() {
            final LocationManager locationManager = (LocationManager) getSystemService(Context
                    .LOCATION_SERVICE);
            List<String> providers = locationManager.getProviders(true);
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this,
                            Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager
                            .PERMISSION_GRANTED) {
                return null;
            }
            mBestLocation = null;
            for (String provider : providers) {
                Location location = locationManager.getLastKnownLocation(provider);
                if (location == null) {
                    continue;
                }
                if (mBestLocation == null || location.getAccuracy() < mBestLocation.getAccuracy()) {
                    mBestLocation = location;
                }
            }
            // TODO: 2018/3/16
            locationManager.addGpsStatusListener(new GpsStatus.Listener() {
                @Override
                public void onGpsStatusChanged(int event) {
                    @SuppressWarnings("MissingPermission") GpsStatus status = locationManager.getGpsStatus(null);
                    if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
                        int maxSatellites = status.getMaxSatellites();
                        Iterator<GpsSatellite> iters = status.getSatellites().iterator();
                        int count = 0;
                        while (iters.hasNext() && count <= maxSatellites) {
                            GpsSatellite s = iters.next();
                            count++;
                        }
                        atellitessNum = count;
                    }
                }
            });
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 5, locationListener);
            return mBestLocation;
    }
    
    • 获取电池电量和手机充电状态
     //获取电池电量和充电状态
     private int[] getBattery() {
            int battery = 0, chargeState = 0;
            Intent intent = registerReceiver(null,
                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
            if (intent != null && intent.getExtras() != null) {
                int level = intent.getIntExtra("level", 0);
                //电量的总刻度
                int scale = intent.getIntExtra("scale", 100);
                battery = (level * 100) / scale;
                int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
                boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                        status == BatteryManager.BATTERY_STATUS_FULL;
                chargeState = isCharging ? 1 : 0;
            }
            return new int[]{battery, chargeState};
    }
    

    相关文章

      网友评论

        本文标题:Android手机的设备信息获取

        本文链接:https://www.haomeiwen.com/subject/dvglqftx.html