2011-08-15 27 views
24

có thể hiển thị tiện ích con trong "Thêm vào màn hình chính> Tiện ích" Hộp thoại chỉ cho một phiên bản Android nhất định mà không tải lên hai APK và gán cho số phiên bản SDK thích hợp không?là nó có thể hiển thị widget chỉ cho một phiên bản Android nhất định?

+2

nó sẽ rất thú vị, không chỉ phụ thuộc vào phiên bản mà còn nhiều thứ nữa. – berlindev

+0

tất nhiên nó sẽ :) tôi chỉ cần viết phiên bản Android bởi vì tôi đang gặp vấn đề với 2.1 vì các hạn chế API. – Cloudgiant

Trả lời

30

Tôi có một cách để làm điều đó mà không cần mã bất kỳ ví dụ:

Trong res của bạn \ giá trị dir tạo một file bools.xml:

<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="honeycombOrAbove">false</bool> </resources>

Tạo một giá trị-v11 dir (cho các giá trị tổ ong hoặc cao hơn), sao chép tệp vào nó và đặt giá trị thành true.

Sau đó, trong tệp kê khai để sử dụng bộ thu tiện ích con: android: enabled = "@ bool/honeycombOrAbove". Tôi cũng sử dụng nó trong hoạt động cấu hình cho widget.

Điều này có nghĩa là tiện ích bị tắt vào lúc cài đặt.

+1

Giải pháp sáng chói vì giải pháp này hoạt động khi ứng dụng được cài đặt và đây là vấn đề cung cấp nhiều hơn. Cảm ơn vì điều này - bạn đã cứu tôi một loạt săn bắn cho một giải pháp sáng nay. –

+1

Giải pháp hoàn hảo. Điều này thực sự cần phải có được câu trả lời được chấp nhận! –

+1

Giải pháp rất thông minh! Chắc chắn câu trả lời tốt nhất! – pdegand59

9

Bạn có thể làm điều đó với componentEnableSetting. Chỉ cần tắt tiện ích bạn không muốn liệt kê. Thay đổi sẽ hoạt động sau khi khởi động lại điện thoại.

Context context = getApplicationContext(); 
String str1 = "org.classname.to.widget.provider"; 
ComponentName componentName = new ComponentName(context, str1); 
PackageManager packageManager = getPackageManager(); 

int versioncode = Integer.valueOf(android.os.Build.VERSION.SDK);  

//enable widget 
packageManager.setComponentEnabledSetting(componentName, 1, 1); 

//disable widget 
packageManager.setComponentEnabledSetting(componentName, 2, 1); 
+0

Yep giải pháp này hoạt động mặc dù tôi đã phải thay đổi nó một chút vì mã này tìm số phiên bản của ứng dụng chứ không phải SDK. Cảm ơn rất nhiều! – Cloudgiant

+0

bạn đã thay đổi điều gì? tôi có thể chỉnh sửa và sau đó bạn có thể phê duyệt câu trả lời là giải pháp cho vấn đề của bạn – berlindev

+0

chỉ dòng này "int versioncode = Integer.valueOf (android.os.Build.VERSION.SDK);" và thêm nếu các điều kiện cho 2.1 để tắt và 2.2 hoặc cao hơn để bật – Cloudgiant

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