Problem i Android 2.0

Diskussion i 'Frågor, support och diskussion' startad av Kaj, 7 nov 2009.

  1. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Fick precis en buggrapport från en Motorola Droid-användare. Snowstorm gör forced close i Android 2.0, och jag har upptäckt att detta är problemet:

    Kod:
    	
    	public static void setLanguage(Context context, Configuration configuration) {
    		String languageToLoad  = "en";
    		if (configuration != null && configuration.language == 1) {
    			languageToLoad  = "sv";
    		}
    		 Locale locale = new Locale(languageToLoad);
    		 Locale.setDefault(locale);
    		 android.content.res.Configuration config = new android.content.res.Configuration();
    		 config.locale = locale;
    		 //Causes bug in Android 2.0. But why?
    		 context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());	
        }
    
    .. så detta är en varning till alla som dynamiskt försöker sätta Locale för en applikation. (Enda sättet att t.ex tvinga svenska i Android 1.5/1.6)

    Någon som vet hur man i appen kan kolla vilken API version som en device kör? Då kan jag iaf lägga en if-sats runt anropet.
     
  2. Näslund

    Näslund Teen Droid Medlem

    Blev medlem:
    4 jun 2009
    Inlägg:
    322
    Mottagna gillanden:
    2

    MINA ENHETER

  3. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Tack, men det där verkar beröra det man skriver i sin manifest. Jag vill att appen skall säga att den fungerar på 2.0, och det är redan fixat, men i koden måste jag om det är 2.0 (API level 5) strunta i anropet till updateConfiguration. Alltså vill jag ha något som liknar denna pseudokod:

    Kod:
    if (getApiLevel() < 5) {
      setLocale(...);
    }
    
     
  4. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Ställde frågan på Android Developers Google Group, och detta är nog vad jag sökte:
    android.os.Build.VERSION.RELEASE

    Ger "1.6", "2.0" osv. Det finns även så att man kan få det via en interger istället för sträng, men desvärre lades den till i 1.6, så det bör man inte använda än så länge.
     
  5. KiviE

    KiviE Kid Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    81
    Mottagna gillanden:
    4

    MINA ENHETER

  6. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Tack,

    android.os.Build.VERSION.SDK har blivit deprecated, så nu kollar jag på android.os.Build.VERSION.RELEASE iom att den också funkar.
     
  7. Perty

    Perty Youth Droid Medlem

    Blev medlem:
    6 aug 2009
    Inlägg:
    119
    Mottagna gillanden:
    2

    MINA ENHETER

    Du kan även lägga in olika xml'er med värden för olika versioner i res/ mappen.

    Typ:

    res/xml/values.xml <-- default
    res/xml-v4/values.xml <- 1.6
    res/xml-v5/values.xml <- 2.0

    Kanske inte är optimalt, men det är bra att veta i andra sammangang..

    tex om man vill ha attribut i xml som stödjs i de över 1.5 tex.

    /perty
     
  8. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Tackar, bra att känna till, men i detta fallet var det olika kod som behövde exekvera för olika versioner.