博客
关于我
获取手机的各项信息
阅读量:576 次
发布时间:2019-03-07

本文共 5324 字,大约阅读时间需要 17 分钟。

一步一步引入手机信息获取的方法(附带Java代码示例)

在实际开发中,获取手机信息是非常常见的需求。要实现这一功能,可以通过Android的系统API和一些常用的方法。下面,我将详细讲解如何获取手机信息,并结合代码示例,帮助您轻松实现功能。

一、工具类的设计与实现(AndroidInfo)

为了简化手机信息获取的过程,我打造了一个工具类AndroidInfo。这是一个专门用于获取手机信息的类,涵盖了手机型号、系统版本、SDK版本、WiFi信息等多方面的内容。

1.1 类概述

AndroidInfo是一个静态方法类, 主要功能如下:

  • 获取手机型号:通过.android.os.Build.MODEL获取。
  • 获取手机厂商:通过android.os.Build.BRAND获取。
  • 获取系统版本号:通过android.os.Build.VERSION.RELEASE获取。
  • 获取SDK版本号:通过android.os.Build.VERSION.SDK获取。
  • 获取当前APK版本号码:通过PackageManager获取packageName对应的版本码。
  • 获取版本号名称:通过PackageManager获取版本号名称。
  • 获取当前连接的WiFi的MAC地址:通过WifiManager获取BSSID。
  • 获取WiFi名称:通过WifiManager获取SSID。
  • 获取唯一ID:结合TelephonyManager和Setting内核的方法,生成一个唯一ID。

1.2 使用示例

您可以在需要获取手机信息的Activity中直接调用AndroidInfo类的相关方法。

1.3 需要权限的说明

要使用AndroidInfo类中的某些方法,需要firstGain得到权限。例如,获取WiFi信息需要ACCESS_WIFI_STATE权限,获取TelephonyManager信息需要READ_PHONE_STATEWRITE_PHONE_STATE权限。在使用前,请确保在AndroidManifest.xml中声明这些权限。

二、Activity代码示例

下面是一个完整的Activity示例,展示了如何使用AndroidInfo工具类来获取手机信息并在UI上展示。

package com.example.administrator.musicdemo;import android.Manifest;import android.annotation.SuppressLint;import android.content.Context;import android.content.pm.PackageManager;import android.graphics.Point;import android.os.Build;import android.os.Bundle;import android.provider.Settings;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;import android.telephony.TelephonyManager;import android.view.Display;import android.view.WindowManager;import android.widget.TextView;import butterknife.BindView;import butterknife.ButterKnife;public class Main3Activity extends AppCompatActivity {    @BindView(R.id.phoneModel)    TextView phoneModel;    @BindView(R.id.phoneProducer)    TextView phoneProducer;    @BindView(R.id.systemVersion)    TextView systemVersion;    @BindView(R.id.sdkVersion)    TextView sdkVersion;    @BindView(R.id.versionCode)    TextView versionCode;    @BindView(R.id.versionName)    TextView versionName;    @BindView(R.id.wifiName)    TextView wifiName;    @BindView(R.id.wifiMac)    TextView wifiMac;    @BindView(R.id.imei)    TextView imei;    @BindView(R.id.imsi)    TextView imsi;    @BindView(R.id.uuid)    TextView uuid;    private TelephonyManager mTelephonyMgr;    @SuppressLint("MissingPermission")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main3);        ButterKnife.bind(this);        // 请求相应的权限        requestReadPhonePermission();        // 初始化TelephonyManager        mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);        // 获取并展示手机信息        phoneModel.setText("手机型号: " + AndroidInfo.getPhoneModel());        phoneProducer.setText("手机厂商: " + AndroidInfo.getPhoneProducer());        systemVersion.setText("手机系统版本号: " + AndroidInfo.getSystemVersion());        sdkVersion.setText("SDK版本: " + AndroidInfo.getSDKVersion());        versionCode.setText("软件版本号: " + AndroidInfo.getVersionCode(this));        versionName.setText("软件版本号名称: " + AndroidInfo.getVersionName(this));        wifiName.setText("WiFi名称: " + AndroidInfo.getWifiName(this));        wifiMac.setText("WiFi MAC地址: " + AndroidInfo.getWifiMacAddress(this));        imei.setText("IMEI: " + mTelephonyMgr.getDeviceId());        imsi.setText("IMSI: " + mTelephonyMgr.getSubscriberId());        uuid.setText("UUID: " + AndroidInfo.getUniqueID(this));    }    // 获取手机信息的方法    @SuppressLint("MissingPermission")    public String getPhoneInfo() {        StringBuilder sb = new StringBuilder();        sb.append("手机信息汇总:\n");        sb.append("主板: ").append(Build.BOARD).append("\n");        sb.append("系统启动程序版本号: ").append(Build.BOOTLOADER).append("\n");        sb.append("系统定制商: ").append(Build.BRAND).append("\n");        sb.append("cpu指令集: ").append(Build.CPU_ABI).append("\n");        sb.append("cpu指令集2: ").append(Build.CPU_ABI2).append("\n");        sb.append("设置参数: ").append(Build.DEVICE).append("\n");        sb.append("显示屏参数: ").append(Build.DISPLAY).append("\n");        sb.append("硬件识别码: ").append(Build.FINGERPRINT).append("\n");        sb.append("硬件名称: ").append(Build.HARDWARE).append("\n");        sb.append("HOST: ").append(Build.HOST).append("\n");        sb.append("修订版本列表: ").append(Build.ID).append("\n");        sb.append("手机制造商: ").append(Build.MANUFACTURER).append("\n");        sb.append("手机型号: ").append(Build.MODEL).append("\n");        sb.append("硬件序列号: ").append(Build.SERIAL).append("\n");        sb.append("手机产品型号: ").append(Build.PRODUCT).append("\n");        sb.append("设备IMEI: ").append(mTelephonyMgr.getDeviceId()).append("\n");        sb.append("设备SN: ").append(mTelephonyMgr.getDevice Software Version()).append("\n");        return sb.toString();    }    // 提取权限申请逻辑    private void requestReadPhonePermission() {        // 检查是否需要权限处理        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_WIFI_STATE)) {            // 可以在这里进行权限申请前的说明        } else {            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_WIFI_STATE}, 0);        }    }}

三、注意事项

  • 权限管理:在使用AndroidInfo类获取手机信息之前,请确保在AndroidManifest.xml中声明了所需的权限。例如:

  • 版本兼容性:尽量使用最新的Android版本进行开发,确保与新版本系统相兼容。

  • 崩溃处理:在生产环境中,建议对获取信息的过程进行崩溃处理,确保在出现异常时能够快速定位问题。

  • 权限申请细节:在 СобPropertyName 中,不妨在权限申请前进行权限说明,以提升用户体验。

  • 在掌握以上方法后,就可以轻松地在应用程序中添加手机信息获取功能,满足不同业务需求。

    转载地址:http://hjmjz.baihongyu.com/

    你可能感兴趣的文章
    MySQL-【4】基本操作
    查看>>
    Mysql-丢失更新
    查看>>
    Mysql-事务阻塞
    查看>>
    Mysql-存储引擎
    查看>>
    mysql-开启慢查询&所有操作记录日志
    查看>>
    MySQL-数据目录
    查看>>
    MySQL-数据页的结构
    查看>>
    MySQL-架构篇
    查看>>
    MySQL-索引的分类(聚簇索引、二级索引、联合索引)
    查看>>
    Mysql-触发器及创建触发器失败原因
    查看>>
    MySQL-连接
    查看>>
    mysql-递归查询(二)
    查看>>
    MySQL5.1安装
    查看>>
    mysql5.5和5.6版本间的坑
    查看>>
    mysql5.5最简安装教程
    查看>>
    mysql5.6 TIME,DATETIME,TIMESTAMP
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    Mysql5.6主从复制-基于binlog
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    查看>>