Android手机的设备信息获取
2018-03-16 本文已影响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};
}