Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách lấy phiên bản API Android lập trình

Hướng dẫn này trình bày cách lấy API Level (SDK_INT) và tên phiên bản Android (codename) của thiết bị đang chạy ứng dụng. Thông tin này hữu ích để xử lý tương thích ngược (backward compatibility) hoặc bật/tắt tính năng theo phiên bản.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_above="@id/button"
        android:layout_centerInParent="true"
        android:layout_marginBottom="12sp"
        android:textSize="24sp"
        android:textStyle="bold|italic" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="16sp"
        android:textStyle="bold"
        android:text="Lấy phiên bản Android API" />

</RelativeLayout>

Bước 3: Code MainActivity (src/MainActivity.java)

import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    Button button;
    TextView textView;

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

        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);

        button.setOnClickListener(v -> {
            int apiLevel = Build.VERSION.SDK_INT;
            String versionName = getAndroidVersionName(apiLevel);
            textView.setText("API Level: " + apiLevel + "\n" + versionName);
        });
    }

    // Chuyển API level thành tên phiên bản dễ đọc
    private String getAndroidVersionName(int apiLevel) {
        switch (apiLevel) {
            case Build.VERSION_CODES.BASE: return "1.0 (Base)";
            case Build.VERSION_CODES.BASE_1_1: return "1.1 (Base)";
            case Build.VERSION_CODES.CUPCAKE: return "1.5 (Cupcake)";
            case Build.VERSION_CODES.DONUT: return "1.6 (Donut)";
            case Build.VERSION_CODES.ECLAIR: return "2.0-2.1 (Eclair)";
            case Build.VERSION_CODES.FROYO: return "2.2 (Froyo)";
            case Build.VERSION_CODES.GINGERBREAD: return "2.3 (Gingerbread)";
            case Build.VERSION_CODES.HONEYCOMB: return "3.0-3.2 (Honeycomb)";
            case Build.VERSION_CODES.ICE_CREAM_SANDWICH: return "4.0 (Ice Cream Sandwich)";
            case Build.VERSION_CODES.JELLY_BEAN: return "4.1-4.3 (Jelly Bean)";
            case Build.VERSION_CODES.KITKAT: return "4.4 (KitKat)";
            case Build.VERSION_CODES.LOLLIPOP: return "5.0-5.1 (Lollipop)";
            case Build.VERSION_CODES.M: return "6.0 (Marshmallow)";
            case Build.VERSION_CODES.N: return "7.0-7.1 (Nougat)";
            case Build.VERSION_CODES.O: return "8.0-8.1 (Oreo)";
            case Build.VERSION_CODES.P: return "9.0 (Pie)";
            case Build.VERSION_CODES.Q: return "10.0 (Android 10)";
            case Build.VERSION_CODES.R: return "11.0 (Android 11)";
            case Build.VERSION_CODES.S: return "12.0 (Android 12)";
            case Build.VERSION_CODES.S_V2: return "12L (Android 12L)";
            case Build.VERSION_CODES.TIRAMISU: return "13.0 (Android 13)";
            case Build.VERSION_CODES.UPSIDE_DOWN_CAKE: return "14.0 (Android 14)";
            case Build.VERSION_CODES.VANILLA_ICE_CREAM: return "15.0 (Android 15)";
            default:
                return "Android " + apiLevel + " (Phiên bản mới hơn)";
        }
    }
}
Cải tiến: Code gốc dùng switch-case hardcoded số (14, 15, 16...). Phiên bản trên dùng Build.VERSION_CODES.* constants - an toàn, rõ ràng, tự cập nhật khi compile với SDK mới.

Bước 4: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Nhấn nút để hiển thị API Level và tên phiên bản.

Cách lấy phiên bản API Android lập trình

Các trường hữu ích trong Build.VERSION

Trường Kiểu Mô tả
SDK_INT int API Level (ví dụ: 33, 34)
RELEASE String Phiên bản user-visible (ví dụ: "14", "13", "12")
CODENAME String Tên mã nội bộ (ví dụ: "REL", "UpsideDownCake")
INCREMENTAL String Build number nội bộ
SECURITY_PATCH String Ngày bản vá bảo mật (yyyy-MM-dd)

Kiểm tra phiên bản trong code (Best Practice)

// Cách đúng: dùng Build.VERSION_CODES
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    // Android 6.0+ (API 23+): Runtime permissions
    requestPermissions(...);
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    // Android 7.0+ (API 24+): Multi-window, Direct Reply notifications
}

// Kiểm tra range
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP 
        && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
    // Chỉ Android 5.0 - 5.1
}

Build.VERSION_CODES mới (API 31+)

Từ Android 10 (Q), Google dùng tên bánh kẹo nội bộ nhưng công khai chỉ gọi "Android 10, 11, 12...". Các hằng số Build.VERSION_CODES vẫn tồn tại:

  • Q = 29 (Android 10)
  • R = 30 (Android 11)
  • S = 31 (Android 12)
  • S_V2 = 32 (Android 12L)
  • TIRAMISU = 33 (Android 13)
  • UPSIDE_DOWN_CAKE = 34 (Android 14)
  • VANILLA_ICE_CREAM = 35 (Android 15)