Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Rick45

Android receber valor das settings da app

Recommended Posts

Rick45

Boa noite pessoal, estou a tentar fazer uma aplicação para android e estou com o seguinte problema.

nas settings tenho la uma para colocar um valor int

<EditTextPreference
		android:title="Intervalo de Captura"
		android:key="intervtemp"
		android:dialogTitle="Segundos"
		android:inputType="numberDecimal"/>

depois queria na main activity ler esse valor e utiliza-lo

como fasso? ja vi varias opções mas não tou a conseguir por a dar :S

Share this post


Link to post
Share on other sites
NunoDinis
String variavel = aSetting;
aTuaEditText.setText(variavel);


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
NunoDinis

O que fiz foi passar uma setting que recebas para uma variável, e pus essa numa caixa de texto (edittext):

Para que possas perceber melhor vou fazer um caso prático: Buscar o imei do telemóvel, colocá-lo numa variável e numa caixa de texto.

//Declara a variável
String imei = "";
//Vai buscar a settting, neste caso o IMEI
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
//põe a setting na variável
imei= telephonyManager.getDeviceId();
//põe a variável numa edittext
aTuaCaixaDeTexto.setText(imei);  //Caixa de texto


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
Rick45

o problema é que como disses-te no segundo topico, eu não sei é ir buscar o valor, como deste de exemplo o do emei:

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

é essa parte que nao sei, so que em vez de ir buscar a info ao tlm quero que va buscar as settings que criei para a minha app,

eu tenho assim:

SharedPreferences settings = getSharedPreferences(intervtemp, 0);
   int valor = settings.getint(intervtemp);

so que nao consigo por a funcionar, deve estar a faltar alguma coisa ou mal :P

Share this post


Link to post
Share on other sites
NunoDinis
Rick45

já estou maluco com isto :P ... fiz um exemplo simples e nem isso consigo por a dar...

tenho 3 ficheiros:

mainactivity:


package com.example.testes;

import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView teste;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

teste = (TextView) findViewById(R.id.teste);

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);





int testea = preferences.getInt("intervtemp", 1);

teste.setText(testea);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 0, 0, "Settings");
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
startActivity(new Intent(this, setings.class));
return true;
}
return false;
}

}

o xml com o layout das settings:


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

       <PreferenceCategory
               android:title="Opções">
       <EditTextPreference 
           android:title="Intervalo de Captura" 
           android:key="intervtemp" 
           android:dialogTitle="Segundos"
           android:defaultValue="12"
           android:inputType="numberDecimal"/>
       <EditTextPreference android:title="isto é um teste" android:dialogTitle="teste" android:key="teste"/>

       <CheckBoxPreference android:key="vibrar_key"
               android:title="vibrar"
               android:defaultValue="true" />


       </PreferenceCategory>
</PreferenceScreen>

e a class para chamar o menu de setings


package com.example.testes;


import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;

public class setings extends PreferenceActivity {

public static final String PREFS_NAME = "setings";

EditTextPreference intervtemp;

public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       addPreferencesFromResource(R.xml.setings);
   }
}

onde está o meu erro??

com este exemplo o que quero e que no ecra aparece o valor que tenho armazenado nas setings.

alguem me sabe dizer o que falta ou tamal... é que ja tou cego com isto :P

Share this post


Link to post
Share on other sites
NunoDinis

E´stas certo de que o testea retorna valor ?

Faz um teste. Coloca isto depois de setares para o valor da caixa de texto:

Toast.makeText(this, "TESTE ::: " + testea, Toast.LENGTH_SHORT).show();


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
Rick45

finalmente ja consegui por isto a dar :P , arranjei um livro sobre android ela tinha explicado passo a passo e vi que me faltava algumas coisas nao na class onde queria ler os valores mas sim na class settings, obligado pela ajuda,

Share this post


Link to post
Share on other sites
Rick45

era bom de mais para ser verdade :P

arrumei um apareceu outro, eu tinha uma setting para um boleano e agora adicionei uma para um int.

a do boleano funciona 100% mas a mesma coisa para int nao me está a dar

tenho isto

na settings.java


/** apanhar o valor do intervalo de tempo */
public static int getintervalo(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(
intervalo_de_tempo, 10);
}

/** apanhar o boleano das ajudas */
public static boolean getHints(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(hints, OPT_HINTS_DEF);
}

depois na main vou buscar assim:


if(Preferences.getHints(getBaseContext())){
testes.setText("funciona");}
else testes.setText("nao da");

caso faça o mesmo para a setting de inteiro

por exemplo

int valor = Preferences.getintervalo(getBaseContext());

a aplicaçao termina

Share this post


Link to post
Share on other sites
Rick45

ja tou cego com isto... criei mais uma seting com imput de strig e funciona tudo certnho


/** apanhar o string de teste */
public static String getTeste(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context)
.getString("teste", "default");
}

a que tenho para ir buscar o valor numerico nao da -.-'

edit:

estive agora a testar mais umas coisas e poenso que o problema está nas settings. o campo que eu tenho para receber o intervalo de tempo


<EditTextPreference 
           android:title="Intervalo de Captura" 
           android:key="intervtemp" 
           android:dialogTitle="Segundos"
           android:defaultValue="12"
           android:inputType="numberDecimal"/>
       <EditTextPreference android:title="isto é um teste" android:dialogTitle="teste" android:key="teste"/>

isto é o EditTextPreference , isto retorna sempre uma string certo?? penso que é por caisa disso que esta a dar problemas... da para por a retornar um inteiro??

Edited by Rick45

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.