2010-06-22 42 views

Trả lời

362

Kiểm tra android.os.Build.VERSION.

  • CODENAME: Các tên mã phát triển hiện nay, hoặc chuỗi "REL" nếu đây là một phát hành xây dựng.
  • INCREMENTAL: Giá trị nội bộ được sử dụng bởi kiểm soát nguồn cơ bản để thể hiện bản dựng này.
  • RELEASE: Chuỗi phiên bản hiển thị của người dùng.
+42

bất kỳ ví dụ nào về cách sử dụng? – jonney

+1

Phần khó khăn về điều này là SDK_INT đã được xác định trong API cấp 4 và sử dụng nó không thành công trên 1-3. Có ai biết cách đối xử độc đáo với điều đó không? – Zordid

+0

SDK khả dụng kể từ API 1, cũng INCREMENTAL khả dụng cho tất cả các phiên bản. – yoshi

42

Bạn có thể tìm phiên bản Android đang xem Build.VERSION.

Tài liệu khuyên bạn nên kiểm tra Build.VERSION.SDK_INT so với các giá trị trong Build.VERSION_CODES.

Điều này là tốt miễn là bạn nhận ra rằng Build.VERSION.SDK_INT chỉ được giới thiệu trong API cấp 4, tức là Android 1.6 (Donut). Vì vậy, điều này sẽ không ảnh hưởng đến bạn, nhưng nếu bạn muốn ứng dụng của mình chạy trên Android 1.5 trở xuống thì bạn sẽ phải sử dụng phiên bản không được chấp nhận Build.VERSION.SDK.

662

Ví dụ làm thế nào để sử dụng nó:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) { 
    // only for gingerbread and newer versions 
} 
+21

Tôi hoàn toàn bỏ qua bất kỳ phiên bản cũ hơn Eclair (7), Android 2.1 và rất sớm, chúng tôi cũng ngừng hỗ trợ cho phiên bản 2.1. Nhưng bạn có thể sử dụng SDK thay vì SDK_INT. – ATom

+11

SDK được triển khai ở cấp API 4. Sử dụng SDK_INT thay thế. – erdomester

+0

Tôi có một câu hỏi: nếu nó đang chạy trên hệ thống cũ hơn GINGERBREAD, thì chúng tôi không thể tải android.os.Build.VERSION_CODES.GINGERBREAD, ứng dụng có bị lỗi không? – HongchaoZhang

53
Build.VERSION.RELEASE; 

Điều đó sẽ cung cấp cho bạn những con số thực tế của phiên bản của bạn; aka 2.3.3 hoặc 2.2. Sự cố khi sử dụng Build.VERSION.SDK_INT là nếu bạn có điện thoại gốc hoặc rom tùy chỉnh, bạn có thể có hệ điều hành không chuẩn (còn gọi là android của tôi đang chạy 2.3.5) và sẽ trả lại giá trị rỗng khi sử dụng Build.VERSION. SDK_INT để Build.VERSION.RELEASE sẽ hoạt động không có vấn đề gì!

+0

Từ SDK: "Chuỗi phiên bản hiển thị của người dùng. Ví dụ:" 1.0 "hoặc" 3.4b5 "." .... "3.4b5" làm cách nào tôi có thể xác định số phiên bản nào? – davs

+0

Toàn bộ câu trả lời 2.3.3 là số phiên bản, hoặc 2.2 hoặc 2.3.5 (tùy chỉnh rom trong trường hợp của tôi). Đó là tổng số phiên bản hệ điều hành. – Falcon165o

+0

Nó trả về cùng một điều Menu >> Cài đặt >> Giới thiệu về điện thoại. Nó nên được dán nhãn Phiên bản Firmware hoặc một cái gì đó để ảnh hưởng đó. – Falcon165o

24

Tôi không thể nhận xét về câu trả lời, nhưng có một sai lầm lớn trong câu trả lời của Kaushik: SDK_INT không giống như phiên bản hệ thống nhưng thực sự đề cập đến cấp API.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ 
    //this code will be executed on devices running ICS or later 
} 

Giá trị Build.VERSION_CODES.ICE_CREAM_SANDWICH bằng 14. 14 là mức API của Ice Cream Sandwich, trong khi phiên bản hệ thống là 4,0. Vì vậy, nếu bạn viết 4.0, mã của bạn sẽ được thực thi trên tất cả các thiết bị bắt đầu từ Donut, vì 4 là cấp API của Donut (Build.VERSION_CODES.DONUT bằng 4).

if(Build.VERSION.SDK_INT >= 4.0){ 
    //this code will be executed on devices running on DONUT (NOT ICS) or later 
} 

Ví dụ này là lý do tại sao sử dụng 'số ma thuật' là một thói quen xấu.

+6

Thực ra, Build.VERSION.SDK_INT là cấp API, không phải là mã phiên bản. Vì vậy, dòng thích hợp sẽ là 'if (Build.VERSION.SDK_INT> = 15) {' – erdomester

+0

Nếu tôi nói với bạn mã phiên bản giống như cấp API và SDK_INT của ICE_CREAM_SANDWICH là 14 không phải 15? @erdomester –

54

Build.Version là nơi dành cho dữ liệu này. Đây là một đoạn mã để định dạng nó.

public String getAndroidVersion() { 
    String release = Build.VERSION.RELEASE; 
    int sdkVersion = Build.VERSION.SDK_INT; 
    return "Android SDK: " + sdkVersion + " (" + release +")"; 
} 

Có vẻ như đây là "Android SDK: 19 (4.4.4)"

7
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) { 
//do anything you like. 
} 
+0

Bạn có thể vui lòng giải thích thêm câu trả lời của mình bằng cách thêm một chút mô tả về giải pháp bạn cung cấp không? – abarisone

+0

ApiHelper - không thể phân giải biểu tượng –

3

sử dụng lớp này

import android.os.Build; 

/** 
* Created by MOMANI on 2016/04/14. 
*/ 
public class AndroidVersionUtil { 
    public static int getApiVersion() { 
     return android.os.Build.VERSION.SDK_INT; 
    } 

    public static boolean isApiVersionGraterOrEqual(int thisVersion) { 
     return android.os.Build.VERSION.SDK_INT >= thisVersion; 
    } 
} 
1

Sử dụng phương pháp này:

public static String getAndroidVersion() { 
     String versionName = ""; 

     try { 
      versionName = String.valueOf(Build.VERSION.RELEASE); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return versionName; 
    } 
8

Ví dụ, một tính năng chỉ hoạt động cho api21 lên sau chúng tôi sửa lỗi trong api21 xuống

if(Build.VERSION.SDK_INT >= 21) { 
    //only api 21 above 
    }else{ 
    //only api 21 down 
    } 
14

Để kiểm tra phiên bản thiết bị lớn hơn lớn hơn hoặc bằng Marshmallow, sử dụng mã này.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){ 

    } 

cho ckecking người khác chỉ cần thay đổi VERSION_CODES như,
K cho kitkat,
L cho loolipop N cho Nougat và vân vân ...

6

Hãy nhận biết rằng Build.VERSION.SDK_INT là không đáng tin cậy, nó được đề cập bởi @ Falcon165o và gần đây tôi đã gặp phải điều đó.

Vì vậy, để có được những dữ liệu String (dựa trên Android version list) của Android hiện đang được cài đặt, tôi đã thực hiện một mã như thế này:

//Current Android version data 
public static String currentVersion(){ 
    double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1")); 
    String codeName="Unsupported";//below Jelly bean OR above Oreo 
    if(release>=4.1 && release<4.4)codeName="Jelly Bean"; 
    else if(release<5)codeName="Kit Kat"; 
    else if(release<6)codeName="Lollipop"; 
    else if(release<7)codeName="Marshmallow"; 
    else if(release<8)codeName="Nougat"; 
    else if(release<9)codeName="Oreo"; 
    return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT; 
} 

Ví dụ về đầu ra nó sản xuất:

Marshmallow v6. 0, API Cấp: 23

+1

Sự cố mã này tại Double.parseDouble (Build.VERSION.RELEASE) khi bản phát hành chứa nhiều hơn một dấu chấm. Ví dụ: 7.1.1 –

+0

@ MiklósKeresztes Cảm ơn bạn đã bình luận thông tin - Tôi đã sửa câu trả lời của mình. –

Các vấn đề liên quan