2012-03-31 8 views
12

Đối với các phiên bản Android 3.0 trở lên, tôi muốn gọi một phương thức nhất định. Có cách nào để kiểm tra xem một phương pháp nhất định có sẵn trong Phiên bản Android đang chạy không?Làm cách nào để kiểm tra HoneyComb hoặc phiên bản cao hơn đang chạy và theo đó, hãy gọi một phương thức cho Phiên bản đó?

Để chính xác hơn, MinSDK của tôi là 7 (Android 2.1), TargetSDK là 8 (Android 2.2) và tôi cần kiểm tra nếu HoneyComb Android 3.0 trở lên đang chạy. Tùy thuộc vào điều đó, làm thế nào tôi có thể gọi phương thức HoneyComb đó?

Phần thứ hai của câu hỏi phát sinh, bởi vì chỉ cần gọi phương thức HoneyComb, sẽ không biên dịch, như tôi đang xây dựng dựa trên 2,2.

Trả lời

27

Để được chính xác hơn, MinSDK của tôi là 7 (Android 2.1), TargetSDK là 8 (Android 2.2) và tôi cần kiểm tra xem HoneyComb Android 3.0 trở lên có đang chạy hay không. Tùy thuộc vào điều đó, làm sao tôi có thể gọi phương thức HoneyComb đó?

BướC# 1: Đặt mục tiêu xây dựng của bạn thành cấp API cao nhất bạn muốn gọi trực tiếp và do đó biên dịch lại. Mục tiêu xây dựng của bạn (ví dụ: compileSdkVersion trong Android Studio, Dự án> Thuộc tính> Android trong Eclipse) không liên quan đến android:targetSdkVersion của bạn.

BướC# 2: Khi câu trả lời khác đã chỉ ra, bạn có thể sau đó có điều kiện gọi các phương thức trong một khối bảo vệ:

if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.HONEYCOMB) { 
    // call something for API Level 11+ 
} 

Phần thứ hai của câu hỏi đặt ra, vì chỉ đơn giản gọi là phương pháp tổ ong, sẽ không biên dịch, như tôi đang xây dựng chống lại 2.2.

Bạn cần thay đổi mục tiêu xây dựng của mình thành API cấp 11 trở lên nếu bạn muốn gọi trực tiếp API cấp 11 trở lên.

+5

Cũng đáng nói rằng 'android.os.Build.VERSION_CODES. *' Thành viên được thay thế vào thời gian biên dịch (iirc, phải không?), Vì vậy anh ấy không cần phải lo lắng về 'HONEYCOMB',' HONEYCOMB_MR2' và vì vậy không có sẵn (tức là đã xác định) trên các hệ thống chạy Gingerbread và dưới đây ... anh ấy có thể kiểm tra chúng trên các hệ thống trước đó. – davidcesarino

+0

Tuyệt vời tx, tôi đã giả định sai rằng mục tiêu xây dựng eclipe liên quan đến android: targetVersion. Yipee! – mrd

+0

Điều duy nhất kém hiệu quả hơn là điều này buộc tôi phải thử nghiệm trên máy tính bảng HoneyComb thay vì 2 chiếc điện thoại di động của mình. May mắn thay, nó chỉ là một tuyên bố duy nhất, vì vậy tôi nhận xét nó ra cho đến khi sự phát triển kết thúc. Tôi không bao giờ sử dụng trình mô phỏng để thử nghiệm, để làm chậm ... – mrd