É muito comum armazenar configurações simples das nossas aplicações para que o usuário não tenha que setá-las toda vez que abrir o programa. No Android, podemos fazer isso através da interface SharedPreferences, com ela podemos salvar grupos de configurações para recuperá-las posteriormente.
// Obtém a instância da SharedPreference
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
// Salva dois valores nas preferências
SharedPreferences.Editor editor = prefs.edit();
editor.putString("operadora", "Claro");
editor.putBoolean("som", false);
editor.commit();
// Recupera os valores
String op = prefs.getString("operadora", null);
boolean som = prefs.getBoolean("som", false);
Ao salvar esses valores eles serão armazenados na pasta /data/data/pacote.da.sua.app/shared_prefs. O valores "Claro" e false serão armazenados para as configurações "operadora" e "som" respectivamente, e estarão lá mesmo que o usuário feche a aplicação. Eles só são apagados através do menu Configurações> Aplicações > Gerencias Aplicações > [Sua app] > Limpar dados.
Mas se eu quiser criar uma tela de configurações? O Android já tem uma API para facilitar (e padronizar) a criação de telas para esse propósito. Podemos defini-la como abaixo:
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
<CheckBoxPreference
android:summaryOff="Som desabilitado"
android:key="som"
android:summaryOn="Som habilitado"
android:title="Som" />
<EditTextPreference
android:key="operadora"
android:dialogTitle="Operadora"
android:dialogMessage="Digite o nome da operadora"
android:title="Operadora" />
</PreferenceScreen>
Eu nomeei esse arquivo como tela_config.xml e salvei em res/xml. Notem que os atibutos android:key são iguais aos que foram especificados no código Java anterior. Para carregar esse arquivo, devemos ter uma classe que herda de PreferenceActivity como a seguir.
public class PreferenciasActivity
extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.tela_config);
}
}
Você pode chamar essa tela como uma Activity comum, e quando os valores dessa tela forem alterados, automaticamente os valores já são salvos na SharedPreference, e consequentemente podem ser obtidos com o código mostrado mais acima. Dessa forma, não precisamos utilizar o SharedPreference.Editor para salvar as configurações ;)
Bem pessoal, esse foi um post bem rápido. Qualquer dúvida deixem seus comentários.
4br4ç05,
nglauber
3 comentários:
Massa Glauber, ontem eu utilizei este recurso no sistema que estou desenvolvendo para salvar o login e a senha do usuário.
O exemplo que peguei tem uma diferença discreta, ainda não tive tempo de pesquisar direito,mas o que usei foi algo com:
getPreferences(MODE_WORLD_READABLE);
getPreferences(MODE_WORLD_WRITEABLE);
Tem uma expicação simples para esta abordagem?
Oi Júlio,
Nessa maneira que você utilizou você passa o nome da configuração, que é o mesmo nome do arquivo XML que contém/conterá as preferências. O segundo parâmetro é a permissão deste arquivo. O modo MODE_WORLD_READABLE permite que qualquer aplicação leia, mas não escreva nesse arquivo de preferências, enquanto que MODE_WORLD_WRITEABLE permite a leitura e escrita a partir de outras aplicações.
No meu exemplo utilizei o nome default e a permissão padrão MODE_PRIVATE.
4br4ç05,
nglauber
Olá Glauber show de bola. =]
Postar um comentário