web-dev-qa-db-fra.com

Alternative à addPreferencesFromResource comme obsolète

Je crée une activité Préférence sur mon application pour permettre à l'utilisateur de démarrer/arrêter la musique de fond d'écran de démarrage comme suit:

public class Prefs extends PreferenceActivity{

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);    
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs);


    }    
}

et à l'intérieur du dossier xml, créez prefs.xml:

 <?xml version="1.0" encoding="utf-8" ?> 
    <PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
      <CheckBoxPreference 
         Android:title="splash music" 
         Android:defaultValue="true" 
         Android:key="checkbox" 
         Android:summary="Plese remove music "/>
    </PreferenceScreen>

et ce code pour l'activité splash:

 public class Splash extends Activity{  
    MediaPlayer ourSong;
@Override
protected void onCreate(Bundle Drandroid) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // TODO Auto-generated method stub
    super.onCreate(Drandroid);
         setContentView(R.layout.splash);  

    ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound); 

     SharedPreferences getPrefs = 
               PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    boolean music = getPrefs.getBoolean("checkbox", true);
    if (music == true)      
    ourSong.start();

    Thread timer = new Thread(){
        public void run(){
            try{
                sleep(5000); }
              catch (InterruptedException e){
                e.printStackTrace(); }
              finally{
    Intent openTurkeyTrip = new Intent("com.Android.dr.MENU");

        startActivity(openplanet); }}                                   
                                };
         timer.start();   }

@Override
protected void onPause() {
            // TODO Auto-generated method stub
    super.onPause();
    ourSong.release();
    finish();
          } 
       }

comment puis-je le résoudre avec une autre classe qui n'est pas obsolète, mon application prendra également en charge les appareils anciens et nouveaux comme ci-dessous:

  <uses-sdk
    Android:minSdkVersion="8"
    Android:targetSdkVersion="17" />

tout conseil sera apprécié, merci.

14
Android Stack

PreferenceActivity n'est pas obsolète.

addPreferencesFromResource() sur PreferenceActivity est déconseillé. Cependant, si vous prenez en charge l'API de niveau 10 ou inférieur, vous n'avez pas d'autre choix que de l'utiliser, au moins sur ces appareils.

L'approche non déconseillée consiste à utiliser PreferenceFragment en conjonction avec PreferenceActivity, comme décrit dans la documentation PrefereceActivity . Si votre application ne prend en charge que l'API de niveau 11 et supérieur, utilisez-la. Si votre application prend en charge des appareils plus anciens, soit:

  • Utilisez addPreferencesFromResource() tout le temps, car cela fonctionne toujours, jusqu'à ce que vous supprimiez la prise en charge des anciennes versions, ou

  • Utilisez addPreferencesFromResource() uniquement sur les appareils plus anciens (en cochant Build.VERSION.SDK_INT), et s'appuyer sur le nouveau système basé sur des fragments sur des appareils plus récents

38
CommonsWare