2012-03-13 38 views
14

Tôi đã tạo ba tiện ích ứng dụng với các kích thước khác nhau cho các phiên bản trước của Honecomb của Android và một tiện ích cuộn danh sách cuộn có thể thay đổi kích thước cho Honeycomb và sau đó.Ẩn tiện ích ứng dụng tùy thuộc vào cấp API

Vì các tiện ích cung cấp chức năng tương tự và chức năng được nhắm mục tiêu cho Honeycomb và sau đó có thể thay đổi kích thước, tôi muốn xóa các phiên bản khác của tiện ích con trên cấp API 12 trở lên. Điều này có thể bằng cách nào đó?

Theo như tôi có thể nói, dường như không có bất kỳ cách nào để vô hiệu hóa tiện ích khỏi đăng ký bởi AppWidgetService nếu nó có thể tìm thấy tệp tài nguyên AppWidgetProviderInfo. Vì vậy, có vẻ như tôi chỉ có thể bao gồm các tiện ích trên các phiên bản sau nhưng không loại trừ các phiên bản được xác định trong thư mục xml nhắm mục tiêu các phiên bản API trước đó.

Trả lời

9

Nếu đó là một tiện ích ứng dụng duy nhất có triển khai trước HC hoặc HC, bạn có thể kết hợp chúng thành một AppWidgetProvider và sử dụng res/xml-v11/res/xml/ để có siêu dữ liệu khác nhau. Tuy nhiên, cách duy nhất tôi có thể nghĩ đến để xử lý kịch bản của bạn là đánh dấu một số trong số AppWidgetProviders bị tắt trong tệp kê khai (android:enabled="false"), sau đó bật và tắt nhà cung cấp của bạn trong lần chạy đầu tiên của ứng dụng dựa trên android.os.Build.VERSION sử dụng PackageManagersetComponentEnabledSetting() để cung cấp cho bạn bộ đúng. Kể từ trên Android 3.1 trở lên, người dùng sẽ cần phải khởi chạy một trong các hoạt động của bạn để có thể thêm tiện ích ứng dụng, dù sao, ít nhất bạn cũng có điểm vào để áp dụng logic này.

+0

Cảm ơn bạn. Giải pháp này đang làm việc tuyệt vời. Sẽ tốt hơn nếu bạn có thể sử dụng thuộc tính 'android: enabled' trong' appwidget-provider' thay vào đó nhưng điều này sẽ phải làm .. :) – davidk

+0

@CommonsWare bạn có thể đưa ra một số ý tưởng ngắn gọn không. – Harshid

+1

Tại sao bạn không chỉ tạo một tệp 'xml' với giá trị boolean trong đó. Trong 'res/values-v11 /' (hoặc bất kỳ loại nào nên loại trừ nó), hãy đặt boolean thành false và trong 'AndroidManifest' của bạn, tham chiếu boolean cho' android: enabled = "@ bool/enable_listview_appwidget" '? – xbakesx

19

OP đã nhận được giải pháp của mình, nhưng đối với phần còn lại của chúng tôi, chúng tôi có thể tận dụng các giá trị bool trong xml và đặt chúng khác nhau trong các thư mục tài nguyên khác nhau.

Vì vậy AndroidManifest của bạn trông giống như sau:

<receiver 
    android:label="@string/app_widget_small" 
    android:enabled="@bool/is_pre_api_11"> 

    <!-- App Widget Stuff Here --> 

</receiver> 
<receiver 
    android:label="@string/app_widget_large" 
    android:enabled="@bool/is_pre_api_11"> 

    <!-- App Widget Stuff Here --> 

</receiver> 
<receiver 
    android:label="@string/app_widget_resizeable" 
    android:enabled="@bool/is_post_api_11"> 

    <!-- App Widget Stuff Here --> 

</receiver> 

Và trong /res/values/attrs.xml:

<resources> 
    <bool name="is_pre_api_11">true</bool> 
    <bool name="is_post_api_11">false</bool> 
</resources> 

Sau đó, trong /res/values-v11/attrs.xml:

<resources> 
    <bool name="is_pre_api_11">false</bool> 
    <bool name="is_post_api_11">true</bool> 
</resources> 

Bây giờ API của bạn 10 và dưới đây sẽ có hai tiện ích ứng dụng (nhỏ và lớn) và API 11 trở lên Tôi có một tiện ích ứng dụng có thể thay đổi kích thước.

+0

có vẻ như bạn chỉ có thể sử dụng một bool –

+0

@Alexey, vâng trong trường hợp này bạn chỉ có thể sử dụng một boolean, cách đây 4,5 năm, nhưng tôi chắc chắn rằng tôi có các điều kiện khác xung quanh việc sử dụng cùng một chiến thuật. Tốt gọi là mặc dù, trong trường hợp này đơn giản chỉ là một boolean suffices. – xbakesx

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