在 Android 應用開發中,獲取設備的基本資訊是常見需求,例如用於設備唯一標識、適配不同系統版本或收集用戶設備數據。本文將示範如何透過 Java 代碼獲取手機號碼、SDK 版本、Android 系統版本以及手機型號等核心資訊。
主要使用 TelephonyManager 類獲取電話相關資訊,以及 android.os.Build 類獲取系統與硬體資訊。
package com.example.deviceinfo;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 獲取電話管理服務
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
// 1. 獲取手機號碼 (需權限 READ_PHONE_STATE)
// 注意:部分設備或 SIM 卡可能返回 null
String phoneNumber = telephonyManager.getLine1Number();
Log.d("DeviceInfo", "手機號碼: " + phoneNumber);
// 2. 獲取手機型號
String phoneModel = Build.MODEL;
Log.d("DeviceInfo", "手機型號: " + phoneModel);
// 3. 獲取 SDK 版本 (API Level)
String sdkVersion = String.valueOf(Build.VERSION.SDK_INT); // 建議使用 SDK_INT
Log.d("DeviceInfo", "SDK 版本: " + sdkVersion);
// 4. 獲取系統版本 (如 12, 13, 14)
String releaseVersion = Build.VERSION.RELEASE;
Log.d("DeviceInfo", "系統版本: " + releaseVersion);
}
}
在 AndroidManifest.xml 中聲明讀取手機狀態的權限,否則 getLine1Number() 會返回 null 或拋出安全異常。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
提示: Android 6.0 (API 23) 以上還需在運行時動態申請該危險權限。
Build 類提供了豐富的靜態字段,可用於構建詳細的設備指紋:
StringBuilder info = new StringBuilder();
info.append("Product: ").append(Build.PRODUCT).append("\n");
info.append("CPU_ABI: ").append(Build.CPU_ABI).append("\n");
info.append("BRAND: ").append(Build.BRAND).append("\n");
info.append("DEVICE: ").append(Build.DEVICE).append("\n");
info.append("MANUFACTURER: ").append(Build.MANUFACTURER).append("\n");
info.append("FINGERPRINT: ").append(Build.FINGERPRINT).append("\n");
info.append("ID: ").append(Build.ID).append("\n");
// 將資訊顯示在 TextView 或 Log 中
Log.d("FullDeviceInfo", info.toString());
通過 TelephonyManager 和 Build 類,我們可以輕鬆獲取 Android 設備的關鍵標識資訊。開發時請注意權限管理及不同廠商 ROM 可能導致的返回值差異。