Android Config File

后端 未结 4 1955
野趣味
野趣味 2020-12-12 17:25

What is the best way and how to set up a config file for a application?

I want the application to be able to look into a text file on the sd card and pick out certa

4条回答
  •  心在旅途
    2020-12-12 17:58

    I met such requirement recently, noting down here, how I did it.

    the application to be able to look into a text file on the sd card and pick out certain information that it requires

    Requirement:

    1. Configuration value(score_threshold) has to be available at the sdcard. So somebody can change the values after releasing the apk.
    2. The config file must be available at the "/sdcard/config.txt" of the android hardware.

    The config.txt file contents are,

    score_threshold=60
    

    Create a utility class Config.java, for reading and writing text file.

    import android.util.Log;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Properties;
    
    public final class Config {
    
        private static final String TAG = Config.class.getSimpleName();
        private static final String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/config.txt";
        private static Config sInstance = null;
    
        /**
         * Gets instance.
         *
         * @return the instance
         */
        public static Config getInstance() {
            if (sInstance == null) {
                synchronized (Config.class) {
                    if (sInstance == null) {
                        sInstance = new Config();
                    }
                }
            }
            return sInstance;
        }
    
        /**
         * Write configurations values boolean.
         *
         * @return the boolean
         */
        public boolean writeConfigurationsValues() {
    
            try (OutputStream output = new FileOutputStream(FILE_PATH)) {
    
                Properties prop = new Properties();
    
                // set the properties value
                prop.setProperty("score_threshold", "60");
    
                // save properties
                prop.store(output, null);
    
                Log.i(TAG, "Configuration stored  properties: " + prop);
                return true;
            } catch (IOException io) {
                io.printStackTrace();
                return false;
            }
        }
    
        /**
         * Get configuration value string.
         *
         * @param key the key
         * @return the string
         */
        public String getConfigurationValue(String key){
            String value = "";
            try (InputStream input = new FileInputStream(FILE_PATH)) {
    
                Properties prop = new Properties();
    
                // load a properties file
                prop.load(input);
                value = prop.getProperty(key);
                Log.i(TAG, "Configuration stored  properties value: " + value);
             } catch (IOException ex) {
                ex.printStackTrace();
            }
            return value;
        }
    }
    

    Create another utility class to write the configuration file for the first time execution of the application, Note: SD card read/write permission has to be set for the application.

    public class ApplicationUtils {
    
      /**
      * Sets the boolean preference value
      *
      * @param context the current context
      * @param key     the preference key
      * @param value   the value to be set
      */
     public static void setBooleanPreferenceValue(Context context, String key, boolean value) {
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
         sp.edit().putBoolean(key, value).commit();
     }
    
     /**
      * Get the boolean preference value from the SharedPreference
      *
      * @param context the current context
      * @param key     the preference key
      * @return the the preference value
      */
     public static boolean getBooleanPreferenceValue(Context context, String key) {
         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
         return sp.getBoolean(key, false);
     }
    
    }
    

    At your Main Activity, onCreate()

    if(!ApplicationUtils.getBooleanPreferenceValue(this,"isFirstTimeExecution")){
               Log.d(TAG, "First time Execution");
               ApplicationUtils.setBooleanPreferenceValue(this,"isFirstTimeExecution",true);
               Config.getInstance().writeConfigurationsValues();
    }
    // get the configuration value from the sdcard.
    String thresholdScore = Config.getInstance().getConfigurationValue("score_threshold");
    Log.d(TAG, "thresholdScore from config file is : "+thresholdScore );
    

提交回复
热议问题