Toggle Switch - Zugriff aus anderer Klasse - komme nicht weiter!!

  • Antworten:6
Da Vid
  • Forum-Beiträge: 11

24.06.2012, 14:45:04 via Website

Hi an alle die das lesen,

ich habe begonnen mich mit der Entwicklung von Android Apps zu beschäftigen und hätte eine Frage zu einer Testapplikation, die ich gerade erstelle...

Meine Main Class:

1public class SmsbutlerActivity extends Activity implements
2 OnCheckedChangeListener {
3 /** Called when the activity is first created. */
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.main);
8
9 // Button Button1 = (Button) findViewById(R.id.button1);
10 // Button1.setOnClickListener(null);
11
12 Switch switch1 = (Switch) findViewById(R.id.switch1);
13
14 if (switch1 != null) {
15 switch1.setOnCheckedChangeListener(this);
16 }
17
18 }
19
20 public void onCheckedChanged(CompoundButton switch1, boolean isChecked) {
21 // TODO Auto-generated method stub
22
23 Toast toast1 = Toast.makeText(this, isChecked ? "aktiviert"
24 : "deaktiviert", Toast.LENGTH_SHORT);
25 toast1.show();
26
27 }
28
29}


Meine Receiver Class:

1public class SMSReceiver extends BroadcastReceiver {
2
3 // private static final CompoundButton switch1 = null;
4
5 SmsbutlerActivity aa = new SmsbutlerActivity();
6
7 public void onReceive(Context context, Intent intent) {
8
9 Bundle bundle = intent.getExtras();
10 String phonenumber1 = "";
11 SmsMessage[] msgs = null;
12
13 if (bundle != null) {
14
15 Object[] pdus = (Object[]) bundle.get("pdus");
16 msgs = new SmsMessage[pdus.length];
17
18 for (int c = 0; c < msgs.length; c++) {
19
20 msgs[c] = SmsMessage.createFromPdu((byte[]) pdus[c]);
21 phonenumber1 += msgs[c].getOriginatingAddress();
22 }
23
24 // hier sollte geprüft werden ob der switch1 true oder false ist...
25 // je nach dem sollte das Toast dann erscheinen oder auch nicht
26
27 Toast toast1 = Toast.makeText(context, "Received at message from: "
28 + phonenumber1, Toast.LENGTH_LONG);
29 toast1.show();
30
31 }
32
33 }
34
35}





Mein Ziel:

Der switch1 soll die Applikation aktivieren oder deaktivieren (nicht System.exit(0))...
Da ich nicht wirklich raus gefunden habe, wie ich das machen kann, war mein 2. Gedanke: Den Toast deaktivieren wenn der switch auf deaktiviert gestellt ist...
Mein Problem: Wie komme ich an den switch1 in der Receiver Klasse ran (da hier ja der Toast rausgeschickt wird!)?

Über Hilfe würde ich mich sehr freuen...´häng da gerade echt fest...

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

24.06.2012, 15:35:24 via Website

Schreibe es in die SharedPreferences und im Receiver schaust du dort nach !

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Da Vid
  • Forum-Beiträge: 11

24.06.2012, 16:20:55 via Website

Vielen Dank für die Antwort! Ich habe mich mal informiert, komme aber noch nicht so richtig weiter... bin noch ein Anfänger und würde mich freuen wenn du mir an meinem Beispiel sagen würdest, wie das ungefähr funktioniert!

Antworten
Da Vid
  • Forum-Beiträge: 11

24.06.2012, 22:53:18 via Website

Also ich hab jetzt mal versucht das mit den SharedPreferences zu machen, allerdings stürzt meine app immer ab sobald ich eine SMS empfange :/ Vielleicht sieht ja jemand meinen Anfängerfehler!!

1public class SmsbutlerActivity extends Activity implements
2 OnCheckedChangeListener {
3
4 private String settings = "settings";
5 private SharedPreferences prefs;
6
7 @Override
8 public void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.main);
11
12 // Button Button1 = (Button) findViewById(R.id.button1);
13 // Button1.setOnClickListener(null);
14
15 Switch switch1 = (Switch) findViewById(R.id.switch1);
16
17 if (switch1 != null) {
18 switch1.setOnCheckedChangeListener(this);
19 }
20
21 }
22
23 public void onCheckedChanged(CompoundButton switch1, boolean isChecked) {
24
25
26 Toast toast1 = Toast.makeText(this, isChecked ? "aktiviert"
27 : "deaktiviert", Toast.LENGTH_SHORT);
28 toast1.show();
29
30 prefs = getSharedPreferences(settings, MODE_WORLD_READABLE);
31 Editor editor = prefs.edit();
32 editor.putBoolean("switch1", switch1.isChecked());
33 editor.commit();
34
35 }
36
37}


1public class SMSReceiver extends BroadcastReceiver {
2
3 private String settings = "settings";
4 private SharedPreferences prefs;
5
6 SmsbutlerActivity aa = new SmsbutlerActivity();
7
8 public void onReceive(Context context, Intent intent) {
9
10 Bundle bundle = intent.getExtras();
11 String phonenumber1 = "";
12 SmsMessage[] msgs = null;
13
14 if (bundle != null) {
15
16 Object[] pdus = (Object[]) bundle.get("pdus");
17 msgs = new SmsMessage[pdus.length];
18
19 for (int c = 0; c < msgs.length; c++) {
20
21 msgs[c] = SmsMessage.createFromPdu((byte[]) pdus[c]);
22 phonenumber1 += msgs[c].getOriginatingAddress();
23 }
24
25
26 boolean b = prefs.getBoolean(settings, true);
27
28 if(b)
29 {
30 Toast toast1 = Toast.makeText(context, "Received at message from: "
31 + phonenumber1, Toast.LENGTH_LONG);
32 toast1.show();
33 }
34
35
36
37
38
39
40
41
42 }
43
44 }
45}

Antworten
Da Vid
  • Forum-Beiträge: 11

25.06.2012, 18:43:58 via App

keiner einen Plan ? Verzweifel hier gerade :(

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.06.2012, 22:27:57 via Website

Wo ist der StackTrace ?

kann es sein das du dein 'pref' gerarnicht erzeugts ? Riecht nach NullPointerException ...

— geändert am 25.06.2012, 22:29:24

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Da Vid
  • Forum-Beiträge: 11

25.06.2012, 23:52:25 via App

ich teste direkt über mein Handy wird da überhaupt ein Stack trace mit geschrieben? die prefs hab ich ganz oben in der klasse erzeugt.....
danke für deine Antwort!

Antworten