2011-08-15 15 views
24

czy możliwe jest wyświetlanie widżetu w "Dodaj do ekranu głównego> Widżety" Tylko okno dialogowe dla określonej wersji Androida bez przesyłania dwóch plików APK i przypisywania odpowiednich numerów wersji SDK?czy możliwe jest wyświetlanie widżetu tylko dla określonej wersji Androida?

+2

byłoby interesujące, nie tylko zależne od wersji, ale i innych rzeczy. – berlindev

+0

oczywiście, to by było :) Właśnie napisałem wersję Androida, ponieważ mam problemy z 2.1 z powodu ograniczeń API. – Cloudgiant

Odpowiedz

30

Mam sposób to zrobić bez kodu np

W twoich res \ ceni reż utworzyć plik bools.xml:

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

Stwórz listę wartości-v11 dir (dla plastra miodu lub wyższych wartości), skopiuj do niego plik i ustaw wartość na true.

Następnie w manifeście dla odbiornika widgetu użyj: android: enabled = "@ bool/honeycombOrAbove". Użyłem go również w działaniu konfiguracyjnym dla widżetu.

Oznacza to, że widget jest wyłączony podczas instalacji.

+1

Doskonałe rozwiązanie, ponieważ działa po zainstalowaniu aplikacji i jest to raczej problem z rezerwowaniem. Dzięki za to - zaoszczędziłeś mi dziś rano polowania na rozwiązanie. –

+1

Idealne rozwiązanie. To naprawdę powinna być zaakceptowana odpowiedź! –

+1

Bardzo sprytne rozwiązanie! Zdecydowanie najlepsza odpowiedź! – pdegand59

9

Można to zrobić za pomocą komponentuEnableSetting. Po prostu wyłącz widżet, którego nie chcesz wyświetlać. Zmiana zostanie aktywowana po ponownym uruchomieniu telefonu.

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

Tak, to rozwiązanie działa, chociaż musiałem to trochę zmienić, ponieważ ten kod szuka numeru wersji aplikacji, a nie SDK. Wielkie dzięki! – Cloudgiant

+0

co zmieniłeś? mogę edytować, a następnie możesz zatwierdzić odpowiedź jako rozwiązanie twojego problemu – berlindev

+0

właśnie w tym wierszu "int versioncode = Integer.valueOf (android.os.Build.VERSION.SDK);" i dodano, jeśli warunki dla 2.1, aby wyłączyć i 2.2 lub wyżej, aby umożliwić – Cloudgiant