原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://2402766.blog.51cto.com/2392766/1080837

为了实现一个功能,需要搜集手机信息,自己先在网上找了相关信息进行了汇总,主要是汇集手机的信息,一般想要的信息在手机设置->关于手机->状态消息里面包含了手机的各种信息,下面的代码中也主要显示了那些信息,但是源码的方法我还没有看,先把总结的贴出来。先上图(太多就截取几个)。

 上代码啦,太多了,就写主要代码了。

  1. // 获取Android手机中SD卡存储信息 获取剩余空间
  2. public void getSDCardInfo() {
  3. // 在manifest.xml文件中要添加
  4. /*
  5. * <uses-permission
  6. * android:name="android.permission.WRITE_EXTERNAL_STORAGE">
  7. * </uses-permission>
  8. */
  9. // 需要判断手机上面SD卡是否插好,如果有SD卡的情况下,我们才可以访问得到并获取到它的相关信息,当然以下这个语句需要用if做判断
  10. if (Environment.getExternalStorageState().equals(
  11. Environment.MEDIA_MOUNTED)) {
  12. // 取得sdcard文件路径
  13. File path = Environment.getExternalStorageDirectory();
  14. StatFs statfs = new StatFs(path.getPath());
  15. // 获取block的SIZE
  16. long blocSize = statfs.getBlockSize();
  17. // 获取BLOCK数量
  18. long totalBlocks = statfs.getBlockCount();
  19. // 空闲的Block的数量
  20. long availaBlock = statfs.getAvailableBlocks();
  21. // 计算总空间大小和空闲的空间大小
  22. // 存储空间大小跟空闲的存储空间大小就被计算出来了。
  23. long availableSize = blocSize * availaBlock;
  24. // (availableBlocks * blockSize)/1024 KIB 单位
  25. // (availableBlocks * blockSize)/1024 /1024 MIB单位
  26. long allSize = blocSize * totalBlocks;
  27. }
  28. }
  29. // 获取手机ip method-1
  30. public String getLocalIpAddress() {
  31. try {
  32. for (Enumeration<NetworkInterface> en = NetworkInterface
  33. .getNetworkInterfaces(); en.hasMoreElements();) {
  34. NetworkInterface intf = en.nextElement();
  35. for (Enumeration<InetAddress> enumIpAddr = intf
  36. .getInetAddresses(); enumIpAddr.hasMoreElements();) {
  37. InetAddress inetAddress = enumIpAddr.nextElement();
  38. if (!inetAddress.isLoopbackAddress()) {
  39. Toast.makeText(this,
  40. inetAddress.getHostAddress().toString(), 3000)
  41. .show();
  42. return inetAddress.getHostAddress().toString();
  43. }
  44. }
  45. }
  46. catch (SocketException ex) {
  47. ex.printStackTrace();
  48. // Log.e("ifo", ex.toString());
  49. }
  50. return "";
  51. } // 需要权限<uses-permission
  52. // android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  53. // <uses-permission
  54. // android:name="android.permission.INTERNET"></uses-permission>
  55. // 获取手机ip method-2
  56. // 首先设置用户权限
  57. // <uses-permission
  58. // android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  59. // <uses-permission
  60. // android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  61. // <uses-permission
  62. // android:name="android.permission.WAKE_LOCK"></uses-permission>
  63. public String getLocalIpAddress2() {
  64. // 获取wifi服务
  65. WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  66. // 判断wifi是否开启
  67. if (!wifiManager.isWifiEnabled()) {
  68. wifiManager.setWifiEnabled(true);
  69. }
  70. WifiInfo wifiInfo = wifiManager.getConnectionInfo();
  71. int ipAddress = wifiInfo.getIpAddress();
  72. String ip = intToIp(ipAddress);
  73. return ip;
  74. }
  75. private String intToIp(int i) {
  76. return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
  77. + "." + (i >> 24 & 0xFF);
  78. }
  79. // 查看本机外网IP
  80. /*
  81. * 该方法需要设备支持上网 查看
  82. * System.out.println((GetNetIp("http://fw.qq.com/ipaddress"))); 加权限
  83. * <uses-permission
  84. * android:name="android.permission.INTERNET"></uses-permission>
  85. * 通过获取http://fw.qq.com/ipaddress网页取得外网IP 这里有几个查看IP的网址然后提取IP试试。
  86. * http://ip168.com/ http://www.cmyip.com/ http://city.ip138.com/ip2city.asp
  87. */
  88. public String GetNetIp(String ipaddr) {
  89. URL infoUrl = null;
  90. InputStream inStream = null;
  91. try {
  92. infoUrl = new URL(ipaddr);
  93. URLConnection connection = infoUrl.openConnection();
  94. HttpURLConnection httpConnection = (HttpURLConnection) connection;
  95. int responseCode = httpConnection.getResponseCode();
  96. if (responseCode == HttpURLConnection.HTTP_OK) {
  97. inStream = httpConnection.getInputStream();
  98. BufferedReader reader = new BufferedReader(
  99. new InputStreamReader(inStream, "utf-8"));
  100. StringBuilder strber = new StringBuilder();
  101. String line = null;
  102. while ((line = reader.readLine()) != null)
  103. strber.append(line + "\n");
  104. inStream.close();
  105. return strber.toString();
  106. }
  107. catch (MalformedURLException e) {
  108. // TODO Auto-generated catch block
  109. e.printStackTrace();
  110. catch (IOException e) {
  111. // TODO Auto-generated catch block
  112. e.printStackTrace();
  113. }
  114. return "";
  115. }
  116. // 获取手机MAC地址
  117. private String getMacAddress() {
  118. String result = "";
  119. WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  120. WifiInfo wifiInfo = wifiManager.getConnectionInfo();
  121. result = wifiInfo.getMacAddress();
  122. // Log.i(TAG, "macAdd:" + result);
  123. return result;
  124. }
  125. // 获取手机屏幕高度
  126. private String getWeithAndHeight() {
  127. // 这种方式在service中无法使用,
  128. DisplayMetrics dm = new DisplayMetrics();
  129. getWindowManager().getDefaultDisplay().getMetrics(dm);
  130. int width = dm.widthPixels; // 宽
  131. int height = dm.heightPixels; // 高
  132. float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
  133. int densityDpi = dm.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
  134. // 在service中也能得到高和宽
  135. WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
  136. width = mWindowManager.getDefaultDisplay().getWidth();
  137. height = mWindowManager.getDefaultDisplay().getHeight();
  138. // 居中显示Toast
  139. Toast msg = Toast.makeText(this, "宽=" + width + "   高=" + height,
  140. Toast.LENGTH_LONG);
  141. msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2,
  142. msg.getYOffset() / 2);
  143. msg.show();
  144. return "(像素)宽:" + width + "\n" + "(像素)高:" + height + "\n"
  145. + "屏幕密度(0.75 / 1.0 / 1.5):" + density + "\n"
  146. + "屏幕密度DPI(120 / 160 / 240):" + densityDpi + "\n";
  147. /*
  148. * 下面的代码即可获取屏幕的尺寸。 在一个Activity的onCreate方法中,写入如下代码:
  149. DisplayMetrics metric   = new DisplayMetrics();
  150. * getWindowManager().getDefaultDisplay().getMetrics(metric);
  151. * int width  = metric.widthPixels; // 屏幕宽度(像素)
  152. * int height = metric.heightPixels;   // 屏幕高度(像素)
  153. * float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
  154. * int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
  155. *
  156. * 但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。
  157. * 比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。
  158. * 因此,研究之后发现,若没有设定多分辨率支持的话
  159. * ,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,
  160. * 这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifest
  161. * .xml文件中,加入supports-screens节点,具体的内容如下: <supports-screens
  162. * android:smallScreens="true" android:normalScreens="true"
  163. * android:largeScreens="true" android:resizeable="true"
  164. * android:anyDensity="true" />
  165. * 这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。
  166. */
  167. }
  168. // 获取手机经纬度
  169. public void getLocation() {
  170. // 1. 创建一个 LocationManager对象。
  171. LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  172. // 2. 创建一个 LocationListener对象。
  173. LocationListener myGPSListener = new LocationListener() {
  174. // 一旦Location发生改变就会调用这个方法
  175. public void onLocationChanged(Location location) {
  176. double latitude = location.getLatitude();
  177. double longitude = location.getLongitude();
  178. }
  179. public void onStatusChanged(String provider, int status,
  180. Bundle extras) {
  181. }
  182. public void onProviderEnabled(String provider) {
  183. }
  184. public void onProviderDisabled(String provider) {
  185. }
  186. };
  187. // 3.向LocationManager 注册一个LocationListener。
  188. Criteria criteria = new Criteria();
  189. criteria.setAccuracy(Criteria.ACCURACY_COARSE);
  190. criteria.setAltitudeRequired(false);
  191. criteria.setCostAllowed(true);
  192. criteria.setPowerRequirement(Criteria.POWER_LOW);
  193. String provider = locationManager.getBestProvider(criteria, true); // 根据Criteria
  194. // 的设置获取一个最佳的Provider
  195. locationManager
  196. .requestLocationUpdates(provider, 5000, 0, myGPSListener);
  197. // 4.移除LocationManager 注册的 LocationListener。
  198. locationManager.removeUpdates(myGPSListener);
  199. }
  200. // 当前网络是否连接
  201. public boolean isNetConnecting() {
  202. ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  203. NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
  204. if (networkInfo == null || !networkInfo.isConnected()) {
  205. // info.setConnected(false);
  206. return false;
  207. else {
  208. // info.setConnected(true);
  209. return true;
  210. }
  211. }
  212. // 获取信号强度
  213. public void getPhoneState() {
  214. // 1. 创建telephonyManager 对象。
  215. TelephonyManager telephonyManager = (TelephonyManager) /* context. */getSystemService(Context.TELEPHONY_SERVICE);
  216. // 2. 创建PhoneStateListener 对象
  217. PhoneStateListener MyPhoneListener = new PhoneStateListener() {
  218. @Override
  219. public void onCellLocationChanged(CellLocation location) {
  220. if (location instanceof GsmCellLocation) {// gsm网络
  221. int CID = ((GsmCellLocation) location).getCid();
  222. else if (location instanceof CdmaCellLocation) {// 其他CDMA等网络
  223. int ID = ((CdmaCellLocation) location).getBaseStationId();
  224. }
  225. }
  226. @Override
  227. public void onServiceStateChanged(ServiceState serviceState) {
  228. super.onServiceStateChanged(serviceState);
  229. }
  230. @Override
  231. public void onSignalStrengthsChanged(SignalStrength signalStrength) {
  232. int asu = signalStrength.getGsmSignalStrength();
  233. int dbm = -113 + 2 * asu; // 信号强度
  234. super.onSignalStrengthsChanged(signalStrength);
  235. }
  236. };
  237. // 3. 监听信号改变
  238. telephonyManager.listen(MyPhoneListener,
  239. PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
  240. /*
  241. * 可能需要的权限 <uses-permission
  242. * android:name="android.permission.WAKE_LOCK"></uses-permission>
  243. * <uses-permission
  244. * android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  245. * <uses-permission
  246. * android:name="android.permission.ACCESS_FINE_LOCATION"/>
  247. * <uses-permission android:name="android.permission.READ_PHONE_STATE"
  248. * /> <uses-permission
  249. * android:name="android.permission.ACCESS_NETWORK_STATE" />
  250. */
  251. }
  252. // 获取手机可用内存和总内存
  253. private String getSystemMemory() {
  254. /*
  255. * 在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?
  256. * 通过读取文件"/proc/meminfo"  的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo
  257. * (ActivityManager.MemoryInfo)方法可以获取当前的可用Memory量。
  258. * "/proc/meminfo"文件记录了android手机的一些内存信息
  259. * ,在命令行窗口里输入"adb shell",进入shell环境,输入
  260. * "cat /proc/meminfo"即可在命令行里显示meminfo文件的内容,具体如下所示。
  261. *
  262. * C:\Users\Figo>adb shell # cat /proc/meminfo cat /proc/meminfo
  263. * MemTotal: 94096 kB
  264. * MemFree: 1684 kB  Buffers: 16 kB  Cached: 27160 kB
  265. * SwapCached: 0 kB  Active: 35392 kB  Inactive: 44180 kB
  266. * Active(anon): 26540 kB Inactive(anon): 28244 kB  Active(file): 8852 kB
  267. * Inactive(file): 15936 kB  Unevictable: 280 kB  Mlocked: 0 kB  * SwapTotal:   0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 52688 kB
  268. * Mapped: 17960 kB Slab: 3816 kB SReclaimable: 936 kB SUnreclaim: 2880
  269. * kB PageTables: 5260 kB NFS_Unstable: 0 kB Bounce: 0 kB
  270. * WritebackTmp:   0 kB
  271. * CommitLimit: 47048 kB
  272. * Committed_AS: 1483784 kB
  273. * VmallocTotal:  876544 kB
  274. * VmallocUsed: 15456 kB
  275. * VmallocChunk: 829444 kB #
  276. *
  277. * 下面先对"/proc/meminfo"文件里列出的字段进行粗略解释: MemTotal: 所有可用RAM大小。 MemFree:
  278. * LowFree与HighFree的总和,被系统留着未使用的内存。 Buffers: 用来给文件做缓冲大小。 Cached:
  279. * 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。
  280. * SwapCached:被高速缓冲存储器(cache
  281. * memory)用的交换空间的大小。已经被交换出来的内存,仍然被存放在swapfile中,
  282. * 用来在需要的时候很快的被替换而不需要再次打开I/O端口。 Active:
  283. * 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。 Inactive:
  284. * 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。 SwapTotal: 交换空间的总大小。 SwapFree:
  285. * 未被使用交换空间的大小。 Dirty: 等待被写回到磁盘的内存大小。 Writeback: 正在被写回到磁盘的内存大小。
  286. * AnonPages:未映射页的内存大小。 Mapped: 设备和文件等映射的大小。 Slab:
  287. * 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。 SReclaimable:可收回Slab的大小。
  288. * SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。
  289. * PageTables:管理内存分页页面的索引表的大小。 NFS_Unstable:不稳定页表的大小。
  290. * 要获取android手机总内存大小,只需读取"/proc/meminfo"文件的第1行,并进行简单的字符串处理即可。
  291. */
  292. String availMemory = getAvailMemory();
  293. String totalMemory = getTotalMemory();
  294. return "可用内存=" + availMemory + "\n" + "总内存=" + totalMemory;
  295. }// 手机的内存信息主要在/proc/meminfo文件中,其中第一行是总内存,而剩余内存可通过ActivityManager.MemoryInfo得到。
  296. private String getAvailMemory() {// 获取android当前可用内存大小
  297. ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  298. MemoryInfo mi = new MemoryInfo();
  299. am.getMemoryInfo(mi);
  300. // mi.availMem; 当前系统的可用内存
  301. return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 将获取的内存大小规格化
  302. }
  303. private String getTotalMemory() {
  304. String str1 = "/proc/meminfo";// 系统内存信息文件
  305. String str2;
  306. String[] arrayOfString;
  307. long initial_memory = 0;
  308. try {
  309. FileReader localFileReader = new FileReader(str1);
  310. BufferedReader localBufferedReader = new BufferedReader(
  311. localFileReader, 8192);
  312. str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小
  313. arrayOfString = str2.split("\\s+");
  314. for (String num : arrayOfString) {
  315. Log.i(str2, num + "\t");
  316. }
  317. initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
  318. localBufferedReader.close();
  319. catch (IOException e) {
  320. }
  321. return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化
  322. }
  323. // 获取手机CPU信息
  324. private String getCpuInfo() {
  325. String str1 = "/proc/cpuinfo";
  326. String str2 = "";
  327. String[] cpuInfo = { "", "" }; // 1-cpu型号 //2-cpu频率
  328. String[] arrayOfString;
  329. try {
  330. FileReader fr = new FileReader(str1);
  331. BufferedReader localBufferedReader = new BufferedReader(fr, 8192);
  332. str2 = localBufferedReader.readLine();
  333. arrayOfString = str2.split("\\s+");
  334. for (int i = 2; i < arrayOfString.length; i++) {
  335. cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " ";
  336. }
  337. str2 = localBufferedReader.readLine();
  338. arrayOfString = str2.split("\\s+");
  339. cpuInfo[1] += arrayOfString[2];
  340. localBufferedReader.close();
  341. catch (IOException e) {
  342. }
  343. // Log.i(TAG, "cpuinfo:" + cpuInfo[0] + " " + cpuInfo[1]);
  344. return "1-cpu型号:" + cpuInfo[0] + "2-cpu频率:" + cpuInfo[1];
  345. }// 和内存信息同理,cpu信息可通过读取/proc/cpuinfo文件来得到,其中第一行为cpu型号,第二行为cpu频率。
  346. /*
  347. * 一、Android 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
  348. * 1、通过PackageManager可获取手机端已安装的apk文件的信息,具体代码如下: PackageManager
  349. * packageManager = this.getPackageManager(); List<PackageInfo>
  350. * packageInfoList = packageManager.getInstalledPackages(0);
  351. * 通过上述方法,可得到手机中安装的所有应用程序,包括手动安装的apk包的信息、、系统预装的应用软件的信息,要区分这两类软件可使用以下方法:
  352. * (a)从packageInfoList获取的packageInfo
  353. * ,再通过packageInfo.applicationInfo获取applicationInfo。
  354. * (b)判断(applicationInfo.flags &
  355. * ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。
  356. * (1)获取应用的代码: public static List<PackageInfo> getAllApps(Context context) {
  357. * List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager
  358. * pManager = context.getPackageManager(); //获取手机内所有应用 List<PackageInfo>
  359. * paklist = pManager.getInstalledPackages(0); for (int i = 0; i <
  360. * paklist.size(); i++) { PackageInfo pak = (PackageInfo) paklist.get(i);
  361. * //判断是否为非系统预装的应用程序 if ((pak.applicationInfo.flags &
  362. * pak.applicationInfo.FLAG_SYSTEM) <= 0) { apps.add(pak); } } return apps;
  363. * } (2)、获取图片、应用名、包名: PackageManager pManager =
  364. * MessageSendActivity.this.getPackageManager(); List<PackageInfo> appList =
  365. * Utils.getAllApps(MessageSendActivity.this); for(int
  366. * i=0;i<appList.size();i++) { PackageInfo pinfo = appList.get(i); shareItem
  367. * = new ShareItemInfo();
  368. * shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
  369. * shareItem
  370. * .setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString
  371. * ()); shareItem.setPackageName(pinfo.applicationInfo.packageName); }
  372. * 其中ShareItemInfo 类自己写的,各位可以忽略 (3)获取支持分享的应用的代码: public static
  373. * List<ResolveInfo> getShareApps(Context context){ List<ResolveInfo> mApps
  374. * = new ArrayList<ResolveInfo>(); Intent intent=new
  375. * Intent(Intent.ACTION_SEND,null);
  376. * intent.addCategory(Intent.CATEGORY_DEFAULT);
  377. * intent.setType("text/plain"); PackageManager pManager =
  378. * context.getPackageManager(); mApps =
  379. * pManager.queryIntentActivities(intent
  380. * ,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT); return mApps; }
  381. * 由于该方法,返回的并不是PackageInfo 对象。而是ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:
  382. * PackageManager pManager = MessageSendActivity.this.getPackageManager();
  383. * List<ResolveInfo> resolveList =
  384. * Utils.getShareApps(MessageSendActivity.this); for(int
  385. * i=0;i<resolveList.size();i++) { ResolveInfo resolve = resolveList.get(i);
  386. * ShareItemInfo shareItem = new ShareItemInfo(); //set Icon
  387. * shareItem.setIcon(resolve.loadIcon(pManager)); //set Application Name
  388. * shareItem.setLabel(resolve.loadLabel(pManager).toString()); //set Package
  389. * Name shareItem.setPackageName(resolve.activityInfo.packageName); } 总结: 通过
  390. * PackageInfo 获取具体信息方法: 包名获取方法:packageInfo.packageName
  391. * icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
  392. * 应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
  393. * 使用权限获取方法:packageManager
  394. * .getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)
  395. * .requestedPermissions 通过 ResolveInfo 获取具体信息方法:
  396. * 包名获取方法:resolve.activityInfo.packageName
  397. * icon获取获取方法:resolve.loadIcon(packageManager)
  398. * 应用名称获取方法:resolve.loadLabel(packageManager).toString()
  399. */
  400. ublic String getSimCardInfo() {
  401. // 在manifest.xml文件中要添加
  402. // <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  403. /*
  404. * TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息
  405. * 、电信网络的状态及手机用户的信息。
  406. * 在应用程序中可以使用这些get方法获取相关数据。TelephonyManager类的对象可以通过Context
  407. * .getSystemService(Context.TELEPHONY_SERVICE)
  408. * 方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制
  409. * ,在开发的时候需要为其添加相应的权限。以下列出TelephonyManager类所有方法及说明:
  410. * TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家
  411. * 以及某些类型的用户访问信息。 应用程序也可以注册一个监听器到电话收状态的变化。不需要直接实例化这个类
  412. * 使用Context.getSystemService (Context.TELEPHONY_SERVICE)来获取这个类的实例。
  413. */
  414. // 解释:
  415. // IMSI是国际移动用户识别码的简称(International Mobile Subscriber Identity)
  416. // IMSI共有15位,其结构如下:
  417. // MCC+MNC+MIN
  418. // MCC:Mobile Country Code,移动国家码,共3位,中国为460;
  419. // MNC:Mobile NetworkCode,移动网络码,共2位
  420. // 在中国,移动的代码为电00和02,联通的代码为01,电信的代码为03
  421. // 合起来就是(也是Android手机中APN配置文件中的代码):
  422. // 中国移动:46000 46002
  423. // 中国联通:46001
  424. // 中国电信:46003
  425. // 举例,一个典型的IMSI号码为460030912121001
  426. // IMEI是International Mobile Equipment Identity (国际移动设备标识)的简称
  427. // IMEI由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的
  428. // 其组成为:
  429. // 1. 前6位数(TAC)是”型号核准号码”,一般代表机型
  430. // 2. 接着的2位数(FAC)是”最后装配号”,一般代表产地
  431. // 3. 之后的6位数(SNR)是”串号”,一般代表生产顺序号
  432. // 4. 最后1位数(SP)通常是”0″,为检验码,目前暂备用
  433. TelephonyManager tm = (TelephonyManager) this
  434. .getSystemService(TELEPHONY_SERVICE);
  435. /*
  436. * 电话状态: 1.tm.CALL_STATE_IDLE=0 无活动,无任何状态时 2.tm.CALL_STATE_RINGING=1
  437. * 响铃,电话进来时 3.tm.CALL_STATE_OFFHOOK=2 摘机
  438. */
  439. tm.getCallState();// int
  440. /*
  441. * 电话方位:
  442. */
  443. // 返回当前移动终端的位置
  444. CellLocation location = tm.getCellLocation();
  445. // 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为
  446. // ACCESS_COARSE_LOCATION。
  447. location.requestLocationUpdate();
  448. /**
  449. * 获取数据活动状态
  450. *
  451. * DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据 DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据
  452. * DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据 DATA_ACTIVITY_NONE
  453. * 数据连接状态:活动,但无数据发送和接受
  454. */
  455. tm.getDataActivity();
  456. /**
  457. * 获取数据连接状态
  458. *
  459. * DATA_CONNECTED 数据连接状态:已连接 DATA_CONNECTING 数据连接状态:正在连接
  460. * DATA_DISCONNECTED 数据连接状态:断开 DATA_SUSPENDED 数据连接状态:暂停
  461. */
  462. tm.getDataState();
  463. /**
  464. * 返回当前移动终端的唯一标识,设备ID
  465. *
  466. * 如果是GSM网络,返回IMEI;如果是CDMA网络,返回MEID Return null if device ID is not
  467. * available.
  468. */
  469. String Imei = tm.getDeviceId();// String
  470. /*
  471. * 返回移动终端的软件版本,例如:GSM手机的IMEI/SV码。 设备的软件版本号: 例如:the IMEI/SV(software
  472. * version) for GSM phones. Return null if the software version is not
  473. * available.
  474. */
  475. tm.getDeviceSoftwareVersion();// String
  476. /*
  477. * 手机号: GSM手机的 MSISDN. Return null if it is unavailable.
  478. */
  479. String phoneNum = tm.getLine1Number();// String
  480. /*
  481. * 获取ISO标准的国家码,即国际长途区号。 注意:仅当用户已在网络注册后有效。 在CDMA网络中结果也许不可靠。
  482. */
  483. tm.getNetworkCountryIso();// String
  484. /*
  485. * MCC+MNC(mobile country code + mobile network code) 注意:仅当用户已在网络注册时有效。
  486. * 在CDMA网络中结果也许不可靠。
  487. */
  488. tm.getNetworkOperator();// String
  489. /*
  490. * 按照字母次序的current registered operator(当前已注册的用户)的名字 注意:仅当用户已在网络注册时有效。
  491. * 在CDMA网络中结果也许不可靠。
  492. */
  493. tm.getNetworkOperatorName();// String
  494. /*
  495. * 当前使用的网络类型: 例如: NETWORK_TYPE_UNKNOWN 网络类型未知 0 NETWORK_TYPE_GPRS GPRS网络
  496. * 1 NETWORK_TYPE_EDGE EDGE网络 2 NETWORK_TYPE_UMTS UMTS网络 3
  497. * NETWORK_TYPE_HSDPA HSDPA网络 8 NETWORK_TYPE_HSUPA HSUPA网络 9
  498. * NETWORK_TYPE_HSPA HSPA网络 10 NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4
  499. * NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5 NETWORK_TYPE_EVDO_A EVDO网络,
  500. * revision A. 6 NETWORK_TYPE_1xRTT 1xRTT网络 7
  501. */
  502. tm.getNetworkType();// int
  503. /*
  504. * 手机类型: 例如: PHONE_TYPE_NONE 无信号 PHONE_TYPE_GSM GSM信号 PHONE_TYPE_CDMA
  505. * CDMA信号
  506. */
  507. tm.getPhoneType();// int
  508. /*
  509. * Returns the ISO country code equivalent for the SIM provider's
  510. * country code. 获取ISO国家码,相当于提供SIM卡的国家码。
  511. */
  512. tm.getSimCountryIso();// String
  513. /*
  514. * Returns the MCC+MNC (mobile country code + mobile network code) of
  515. * the provider of the SIM. 5 or 6 decimal digits.
  516. * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字. SIM卡的状态必须是
  517. * SIM_STATE_READY(使用getSimState()判断).
  518. */
  519. tm.getSimOperator();// String
  520. /*
  521. * 服务商名称: 例如:中国移动、联通 SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
  522. */
  523. tm.getSimOperatorName();// String
  524. /*
  525. * SIM卡的序列号: 需要权限:READ_PHONE_STATE
  526. */
  527. tm.getSimSerialNumber();// String
  528. /*
  529. * SIM的状态信息: SIM_STATE_UNKNOWN 未知状态 0 SIM_STATE_ABSENT 没插卡 1
  530. * SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2 SIM_STATE_PUK_REQUIRED
  531. * 锁定状态,需要用户的PUK码解锁 3 SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4
  532. * SIM_STATE_READY 就绪状态 5
  533. */
  534. tm.getSimState();// int
  535. /*
  536. * 唯一的用户ID: 例如:IMSI(国际移动用户识别码) for a GSM phone. 需要权限:READ_PHONE_STATE
  537. */
  538. tm.getSubscriberId();// String
  539. /*
  540. * 取得和语音邮件相关的标签,即为识别符 需要权限:READ_PHONE_STATE
  541. */
  542. tm.getVoiceMailAlphaTag();// String
  543. /*
  544. * 获取语音邮件号码: 需要权限:READ_PHONE_STATE
  545. */
  546. tm.getVoiceMailNumber();// String
  547. /*
  548. * ICC卡是否存在
  549. */
  550. tm.hasIccCard();// boolean
  551. /*
  552. * 是否漫游: (在GSM用途下)
  553. */
  554. tm.isNetworkRoaming();//
  555. String ProvidersName = null;
  556. // 返回唯一的用户ID;就是这张卡的编号神马的
  557. String IMSI = tm.getSubscriberId(); // 国际移动用户识别码
  558. // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
  559. System.out.println(IMSI);
  560. if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {
  561. ProvidersName = "中国移动";
  562. else if (IMSI.startsWith("46001")) {
  563. ProvidersName = "中国联通";
  564. else if (IMSI.startsWith("46003")) {
  565. ProvidersName = "中国电信";
  566. }
  567. // 返回当前移动终端附近移动终端的信息
  568. /*
  569. * 附近的电话的信息: 类型:List<NeighboringCellInfo>
  570. * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES
  571. */
  572. List<NeighboringCellInfo> infos = tm.getNeighboringCellInfo();
  573. for (NeighboringCellInfo info : infos) {
  574. // 获取邻居小区号
  575. int cid = info.getCid();
  576. // 获取邻居小区LAC,LAC:
  577. // 位置区域码。为了确定移动台的位置,每个GSM/PLMN的覆盖区都被划分成许多位置区,LAC则用于标识不同的位置区。
  578. info.getLac();
  579. info.getNetworkType();
  580. info.getPsc();
  581. // 获取邻居小区信号强度
  582. info.getRssi();
  583. }
  584. return "手机号码:" + phoneNum + "\n" + "服务商:" + ProvidersName+"\n" + "IMEI:" + Imei;
  585. }
  586. // 显示信息对话框
  587. public void showDialog(String title, String info) {
  588. AlertDialog dialog = new AlertDialog.Builder(this)
  589. .setTitle(title)
  590. .setMessage(info)
  591. .setPositiveButton("close",
  592. new DialogInterface.OnClickListener() {
  593. @Override
  594. public void onClick(DialogInterface dialog,
  595. int which) {
  596. dialog.cancel();
  597. dialog = null;
  598. }
  599. }).create();
  600. dialog.show();
  601. }

本文出自 “java之路” 博客,请务必保留此出处http://2402766.blog.51cto.com/2392766/1080837

【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)相关推荐

  1. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  2. android 获取手机信息工具类

    package com.yqy.yqy_listviewheadview;import android.content.Context; import android.telephony.Teleph ...

  3. [转] android获取手机信息大全

    原文链接:http://blog.csdn.net/hytfly/article/details/8552483 IMEI号,IESI号,手机型号: private void getInfo() { ...

  4. Android获取手机信息大全

    IMEI号,IESI号,手机型号 private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemService ...

  5. android获取手机sim卡信息,Android获取手机SIM卡运营商信息的方法

    本文实例讲述了Android获取手机SIM卡运营商信息的方法,对于Android程序设计有非常实用的价值.分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: /** * 获取SIM卡运营商 ...

  6. android 获取已安装 错误代码,android获取手机已经安装的app信息

    Android获取手机已安装APP(系统/非系统) 效果图 主体代码 private ListView mlistview; private ListpackageInfoList; private ...

  7. Android之获取手机基本信息、内存信息、网路信息、电池信息,等一共18项数据

    获取手机信息,代码复制可用,开发工具为:Android Studio 1.手机品牌 2.手机型号 3.屏幕分辨率 4.像素密度 5.屏幕尺寸 6.Android 系统版本 7.运行内存 8.储存空间 ...

  8. android开发获取手机,通过ADB获取Android手机信息,获取手机信息

    通过ADB获取Android手机信息,获取手机信息 原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CP ...

  9. android5.1本机号码,Android获取手机本机号码的实现方法

    Android获取手机本机号码的实现方法 反射TelephoneManager 获取本机号码,注意一下提供的接口有的SIM卡没写是获取不到的,该接口只适配Android5.0以上版本 public S ...

最新文章

  1. 017——VUE中v-fo指令的使用方法
  2. python人工智能-Python和人工智能的关系,看完你就明白了!
  3. java eclipse 内存_java – Eclipse 3.5.1使用大量内存
  4. 读书笔记1 : program paradigm
  5. 拆解苹果iPhone11
  6. 美团点评技术年货:900+页电子书,覆盖前端、后台、大数据、算法……
  7. 加载gif动图_GIF生成神器——ScreenToGif
  8. 安装flash-----纠结
  9. 为什么DevOps和SRE职位这么难招人?
  10. 计算机网络中使用的双绞线通常是16芯的,自考计算机应用基础判断题试题答案...
  11. Java源代码加密工具(Allatori)用法说明
  12. Java+Selenium实现网页截图
  13. python seaborn教程_Seaborn官方教程中文教程(一)
  14. Payoneer取人民币全过程(ATM)
  15. 什么是网桥?何为网桥?防火墙的端口防护是指什么?
  16. 【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”
  17. LibUSB-Win32程序介绍
  18. IOS H5页面滑动过于频繁出现短暂白屏
  19. 科技云报道:5G商用倒计时,你关心的都在这儿
  20. uni-app项目使用多语言切换功能

热门文章

  1. 复盘金典《歌手》2019踢馆变革 有机赋能为梦想助力
  2. c语言程序设计 北交,北交《C语言程序设计(专)》在线作业一 设有定义 int n 0pamp n qamp p 则下列选项中正确的赋值语句是.docx-得力文库...
  3. python桌面宠物
  4. C# 获取当前系统时间 与某一时间相减
  5. bugku CTF练习:眼见非实 writeup
  6. 实现建筑材料企业投标数字化管理,数商云采购管理系统让业务处理更便捷
  7. 达人评测 R9 7940HS和i9 12900HK选哪个 锐龙R97940HS和酷睿i912900HK对比
  8. linux下操作svn,实现根据时间段查看某个指定用户提交的记录
  9. 中证快讯实时更新提醒以及按关键词过滤的实现
  10. 监控视频接入网关配置示例