1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

PreferenceFragment atualizando checkBox com onSharedPreferenceChanged

Boa tarde galera,

estou com o problema bem simples na minha classe que estende PreferenceFragment. Nela eu tenho um checkbox para o usuário configurar a utilização do cartão externo de memória. Ao marcar o checkbox eu verifico se existe cartão sd externo montado.

Caso não esteja montado é exibida uma mensagem ao usuário e o checkbox deve ser desmarcado.

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    Log.d("SettingsFragment", "onSharedPreferenceChanged " + key);
    if (key.equals(SettingsFragment.KEY_PREF_EXTERNAL_SD)) {            
        Config.EXTERNAL_STORAGE = prefs.getBoolean(key, false);
                //Verficia se exister algum cartão montado.           
        if(!FileHandler.checkExtSDCard()){
                //cartao sd não está montado
                //Desmarcar checkbox  
        }

    }
}
public static boolean checkExtSDCard() {

    // Verifica se opção de armazenar arquivos no cartão externo está
    // habilitado e se o cartão está montado.
    if (Config.EXTERNAL_STORAGE) {
        // Retorna uma lista com o caminho de todas as opções de
        // armazenamento externo
        String[] secondStorage = System.getenv("SECONDARY_STORAGE").split(":");
        for (String dir : secondStorage) {
            // Testa se a opção de armazenamento selecionada é o cartão externo
            if (dir.contains("extSdCard") || dir.contains("external_sd")) {
                File ext = new File(dir);
                // Verificar se o caminho do cartão pode ser acessado(leitura e escrita)
                if (ext.canRead() && ext.canWrite()) {
                    Log.d(TAG, "External Dir Changes: " + dir);
                    externalDirectory = dir;
                    return true;
                }
            }
        }

        if (externalDirectory.equals(Environment.getExternalStorageDirectory().getAbsolutePath())) {
            Toast.makeText(Config.getContext(),R.string.pref_externalSd_no_mounted, Toast.LENGTH_LONG).show();

            // Carrega as preferências salvas pelo usuário
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(Config.getContext());
            SharedPreferences.Editor prefsEditor = prefs.edit();

            // Altera o valor de configuração do cartão sd externo para
            // false pois não existe um no dispositivo
            prefsEditor.putBoolean(SettingsFragment.KEY_PREF_EXTERNAL_SD,false);
            prefsEditor.commit();

            return false;
        }
    }else{
        externalDirectory = Environment.getExternalStorageDirectory().getAbsolutePath();
    }
    return false;
}

Na função checkExtSDCard verifica e salva a preferência como false caso não exista um cartão de memória externo disponível no dispositivo.

Agora só preciso desmarcar o checkbox, alguém sabe como faço isso ?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android ou faça a sua própria pergunta.