Beispielübung Problem

  • Hey,
    diese kleine App soll das Telefon stummschalten, vibrieren einschalten und die Medienlautstärke regeln. Klappt auch alles toll, nur will ich Abhängig vom Zustand (Laut,Stumm,Vibration) das Bild anpassen. Folgender Code soll das machen, mit fitpicture das Bild ändern und mit currentringchecker den aktuellen Status prüfen. Wenn ich drauf klicke ändert sich das Bild allerdings nicht (Es geht allerdings, also kein Datei problem oder sowas, wenn ich es in die onCreate reinkopiere geht es). Ich bräuchte das Verständniss ob jede Activity in einer Schleife ausgeführt wird oder wie das läuft, dachte das geht mit dem onResume.


    Tut mir leid, der Java-Code Button hier kürzt das ganze Ding so hässlich ab, ich weiß nicht was ich dagegen tun soll, ich poste den Code nochmal ohne Code-Klammern darunter!


    Java
    package com.dummies.android.silentmodetoggle;
    import android.app.Activity;import android.content.Context;import android.graphics.drawable.Drawable;import android.media.AudioManager;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;
    public class MainActivity extends Activity {    /** Called when the activity is first created. */	private AudioManager mAudioManager;	private int ringMode;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    	mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);    	currentringchecker();    	fitpicture();        lautlos_click();        vibrations_click();        normal_click();        media_click();    }    private void currentringchecker() {    	ringMode = mAudioManager.getRingerMode();    }    private void fitpicture(){    	ImageView imv = (ImageView)findViewById(R.id.phone_icon);    	Drawable newimage = null;    	    	if(ringMode == 0) //Silent    		newimage = getResources().getDrawable(R.drawable.phone_silent);    	if(ringMode == 1) //Vibrate    		newimage = getResources().getDrawable(R.drawable.phone_vibrate);    	if(ringMode == 2) //Normal    		newimage = getResources().getDrawable(R.drawable.phone_on);    	    	imv.setImageDrawable(newimage);   		    }    private void lautlos_click() {        Button lautlosButton = (Button)findViewById(R.id.lautlosbutton);        lautlosButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);							}		});    }    private void vibrations_click() {    	Button vibrationsButton = (Button)findViewById(R.id.vibrationsbutton);    	vibrationsButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);			}		});    }    private void normal_click() {    	Button lautButton = (Button)findViewById(R.id.normalbutton);    	lautButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);			}		});    }    private void media_click() {    	final AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);    	Button mediaButton = (Button)findViewById(R.id.mediasndbutton);    	mediaButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				am.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);			}		});    }    @Override    protected void onResume(){    	super.onResume();    	currentringchecker();    	fitpicture();    }}




    Danke im Vorraus! :Android:

  • Also wie ich beim überfliegen gesehen habe, fehlen bei dem Bildwechsel bei den Ifs die {}.
    Versuch auch mal den Inhalt von OnResume in die Klicks der Buttons einzuarbeiten. Sollte dann eigentlich funktionieren, wenn mich nicht alles täuscht ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Jope, hab das schon probiert, das geht. Kannst du mir sagen was dieses "super" bedeutet? Also bei super.onResume(). Letzte Frage: Werden die ganzen Funktionen die bei onResume stehen in einer Schleife ausgeführt? Sonst wäre das Problem ja klar, er prüft eben nur einmal den RingMode.


    Danke (auch für das Java editieren!)

  • Letzte Frage: Werden die ganzen Funktionen die bei onResume stehen in einer Schleife ausgeführt? Sonst wäre das Problem ja klar, er prüft eben nur einmal den RingMode.


    Ne werden se nicht. Das wird nur einmal audgeführt, wenn die Activity pausiert war und wieder gestartet wird (aber auch beim ersten start). Siehe das Diagramm hier . Wenn du ne Schleife haben willst, solltest du dir in deiner Activity einen Thread starten, der diese typische while(isRunning)... Architektur hat. Das ist aber in deinem Fall absolute Resourcenverschwendung, weil dein simples Proggi ja eindeutig event-basiert arbeitet. Mach die fitPicture() Aufrufe einfach ans Ende jedes Clicklisteners für den Button und dann sollte es gehen.

  • UPDATE: Verschiebe ich die drawable definitionen und den ImageView in fitpicture und rufe selbiges auf geht alles...global definieren ist also Schrott? ;)
    I continue as always, stehe aber vor einem Seltsamen Android Crash beim Startup vom meinem programm. Hier der Code, es crasht seitdem Ich die Bilder wifi_on und wifi_off in das Drawable mit der id:wifi_draw setzen will. Ich weiß noch immer nicht wieso der Code bei mir immer nur in 3 Zeilen kommt. Seltsame Sache das:

    Java
    package com.dummies.android.silentmodetoggle;
    import android.app.Activity;import android.net.wifi.WifiManager;import android.content.Context;import android.graphics.drawable.Drawable;import android.media.AudioManager;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;
    public class MainActivity extends Activity {    /** Called when the activity is first created. */	private AudioManager mAudioManager;	private WifiManager wfm;	private int ringMode;	ImageView im = (ImageView)findViewById(R.id.wifidraw);	Drawable wifi_off = getResources().getDrawable(R.drawable.wifi);	Drawable wifi_on = getResources().getDrawable(R.drawable.wifi_on);    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        wfm = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);    	mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);    	fitpicture();        lautlos_click();        vibrations_click();        normal_click();        media_click();        wlan_click();        if(wfm.isWifiEnabled()==true){        	im.setImageDrawable(wifi_on);}        else{        	im.setImageDrawable(wifi_off);}                	    }    private void fitpicture(){    	ImageView imv = (ImageView)findViewById(R.id.phone_icon);    	Drawable newimage = null;    	ringMode = mAudioManager.getRingerMode();    	if(ringMode == AudioManager.RINGER_MODE_SILENT) //Silent    		newimage = getResources().getDrawable(R.drawable.phone_silent);    	if(ringMode == AudioManager.RINGER_MODE_VIBRATE) //Vibrate    		newimage = getResources().getDrawable(R.drawable.phone_vibrate);    	if(ringMode == AudioManager.RINGER_MODE_NORMAL) //Normal    		newimage = getResources().getDrawable(R.drawable.phone_on);    	    	imv.setImageDrawable(newimage);   	    }    private void wlan_click(){    	Button wlanbut = (Button)findViewById(R.id.wifi_button);    	wlanbut.setOnClickListener(new View.OnClickListener() {			public void onClick(View v) {				if(wfm.isWifiEnabled()){					wfm.setWifiEnabled(false);					im.setImageDrawable(wifi_off);				}				else{					wfm.setWifiEnabled(true);					im.setImageDrawable(wifi_on);				}							}		});    }    private void lautlos_click() {        Button lautlosButton = (Button)findViewById(R.id.lautlosbutton);        lautlosButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);						fitpicture();							}		});    }    private void vibrations_click() {    	Button vibrationsButton = (Button)findViewById(R.id.vibrationsbutton);    	vibrationsButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);				fitpicture();							}		});    }    private void normal_click() {    	Button lautButton = (Button)findViewById(R.id.normalbutton);    	lautButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);				fitpicture();							}		});    }    private void media_click() {    	final AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);    	Button mediaButton = (Button)findViewById(R.id.mediasndbutton);    	mediaButton.setOnClickListener(new View.OnClickListener() {						public void onClick(View v) {				am.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);			}		});    }}



    Das andere Bild geht problemlos.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!