如何在 Android 中获取序列号

在 Android 开发中,获取设备的序列号可以用于标识设备。序列号是一种重要的信息,尤其在需要跟踪设备或进行身份验证的时候。本文将带领你从零开始,逐步实现如何在 Android 中获取设备的序列号。

流程概述

以下是实现获取 Android 设备序列号的步骤:

步骤 描述
1 创建一个新的 Android 项目
2 在清单文件中添加必要的权限
3 编写获取序列号的代码
4 测试应用程序,确保序列号获取成功
5 进行项目的整理与优化

步骤详解

步骤 1: 创建一个新的 Android 项目

  1. 打开 Android Studio,选择 File > New > New Project
  2. 选择一个合适的模版,例如 Empty Activity
  3. 输入项目名称和包名,选择保存路径后点击 Finish

步骤 2: 在清单文件中添加必要的权限

打开 AndroidManifest.xml 文件,添加以下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

说明:此权限允许应用访问设备的状态,包括序列号。但从 Android 10 (API 级别 29) 开始,获取设备序列号的方式有所不同,因此我们需要额外处理。

步骤 3: 编写获取序列号的代码

MainActivity.java 中,进行以下编写:

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE = 1; // 请求码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 检查权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            // 请求权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE);
        } else {
            // 权限已授权,获取序列号
            getDeviceSerialNumber();
        }
    }

    private void getDeviceSerialNumber() {
        // 获取TelephonyManager
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

        // 获取序列号
        String serialNumber = android.os.Build.getSerial(); // 从Android 10开始
        TextView textView = findViewById(R.id.serial_number_text);
        textView.setText(String.format("Device Serial Number: %s", serialNumber));
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission is granted
                getDeviceSerialNumber();
            } else {
                // Permission denied
                Toast.makeText(this, "Permission denied to read device serial number.", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
代码解析
  • import android.Manifest;:导入权限类,用于请求权限。
  • import android.telephony.TelephonyManager;:导入TelephonyManager类,用于访问电话服务。
  • ActivityCompat.checkSelfPermission(...):检查是否已获得权限。
  • ActivityCompat.requestPermissions(...):请求所需权限。
  • android.os.Build.getSerial():在 Android 10 及以上版本中获取设备序列号。

步骤 4: 测试应用程序,确保序列号获取成功

在 Android Studio 中,点击 Run 按钮,运行你的应用程序。当应用首次请求读取电话状态的权限时,你需选择 允许。如果成功,应用会展示设备的序列号。

步骤 5: 进行项目的整理与优化

  • 代码注释:确保每个方法和关键逻辑都有足够的注释,使得代码更容易理解。
  • 视图优化:可以通过修改 XML 布局文件,使界面更加美观。

类图

为了帮助理解整个应用结构,下面是一个简单的类图示例:

classDiagram
    class MainActivity {
        +void onCreate(Bundle savedInstanceState)
        +void getDeviceSerialNumber()
        +void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
    }

结语

经过以上步骤,你现在应该能够成功获取 Android 设备的序列号。随着开发经验的增加,你可以深入探索 Android 提供的更多功能。此外,注意 Android 对隐私的保护,确保在请求用户权限时提供足够的理由。希望你能够在 Android 开发的道路上不断进步,开发出更加优秀的应用程序!如有任何疑问,欢迎进一步交流。