如何在 Android 设备中获取 SN(序列号)

在 Android 开发中,获取设备的序列号(SN)是一个常见需求。尤其是在需要设备唯一标识的时候(如设备管理、应用分析等)。本文将引导你如何实现这一功能。

实现流程

以下是获取 Android 设备序列号的基本步骤:

步骤 描述
1 创建一个新的 Android 项目
2 添加必要的权限到 Manifest 文件
3 在主活动中获取序列号
4 显示序列号

详细步骤

1. 创建一个新的 Android 项目

首先,启动 Android Studio 并创建一个新的 Android 项目。选择你的项目模板(例如,空白活动)并命名你的项目(如GetDeviceSN)。

2. 添加必要的权限到 Manifest 文件

为了获取设备序列号,你需要在 AndroidManifest.xml 中添加相应的权限。打开 AndroidManifest.xml 文件,并添加以下权限:

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

说明READ_PHONE_STATE 权限允许应用程序读取设备的电话状态,包括序列号。

3. 在主活动中获取序列号

接下来,在 MainActivity.java 文件中,编写代码来获取设备序列号。以下是获取设备序列号的代码示例:

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

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE_PHONE_STATE = 101; // 请求码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 检查权限是否被授予
        if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE_PHONE_STATE);
        } else {
            displaySerialNumber(); // 显示序列号
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE_PHONE_STATE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                displaySerialNumber(); // 如果权限被授予,显示序列号
            } else {
                Toast.makeText(this, "Permission denied to read your phone state", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void displaySerialNumber() {
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        String serialNumber = android.os.Build.getSerial(); // 获取设备序列号

        // 显示序列号在 TextView 中
        TextView serialNumberTextView = findViewById(R.id.serial_number_textview);
        serialNumberTextView.setText(serialNumber);
    }
}

代码说明

  • checkSelfPermission:检查是否已授权所需权限。
  • requestPermissions:请求用户授权。
  • onRequestPermissionsResult:处理权限请求的结果。
  • TelephonyManager:获取设备信息管理器的实例。
  • android.os.Build.getSerial():获取设备的序列号。

4. 显示序列号

res/layout/activity_main.xml 中,添加一个 TextView 用来显示序列号:

<LinearLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/serial_number_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="序列号将在这里显示"
        android:textSize="20sp"/>
</LinearLayout>

说明TextView 用于展示设备序列号的文本。

类图

下面是该应用程序的基本类图,表示 MainActivity 的结构和功能:

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

结论

通过上述步骤,你已经成功在 Android 应用中获取并显示了设备的序列号。记得在实际应用中合理使用权限请求,遵循用户隐私的最佳实践。随着你对 Android 开发的深入,你将发现获取设备信息的方式还有很多,继续探索吧!希望这篇文章能对你有所帮助。