Anfänger braucht Hilfe

  • 10 Antworten
  • Letztes Antwortdatum
T

Techniker2013

Neues Mitglied
0
Hallo ich noch ein Neuling und wollte eine App schreiben, welche mir beim betätigen eines ToggleButton den Accelerometer startet. Wenn ich "An" drücke macht die App dies aber wenn ich erneut drauf drücke um den Accelerometer zu beenden bleibt der "An"-Zustand.

Ich komme einfach nicht drauf was mein Fehler ist.
Könnte mir da einer bitte helfen???

Hier der Code

Code:
package de.poseidon_v2;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.ToggleButton;

public class MainActivity extends Activity implements SensorEventListener {

	//Globale Variablen
	
	//Globale Hardware Variablen
	private SensorManager mSensorManager;
	private Sensor mAccelerometer;
	
	//Button, Switch und TextViews
	
	
	
	//Sensor Variablen
	float values[];
	ToggleButton Starten;
	TextView acceleration;
	
	
	
	//MAIN-Methode
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Spielstarten();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
//--------------------------------------------------------------------------------------------
	//Accelerometer
//--------------------------------------------------------------------------------------------
	public void Spielstarten(){
	Starten = (ToggleButton) findViewById(R.id.Starten);
	Starten.setOnClickListener(new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			if(Starten.isChecked()){
				AccelerometerAuslesen();
			}
			else {
				finish();
			}
			
		}
	});
	}
	public void AccelerometerAuslesen(){
		mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        
        acceleration=(TextView)findViewById(R.id.acceleration);
	}
	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		double X=(double)(event.values[0]);
		int XAchse=(int)(Math.round(X));
		double Y=(double)(event.values[1]);
		int YAchse=(int)(Math.round(Y));
		
		acceleration.setText("X: "+XAchse +"/n"+" Y: "+YAchse);
	}
//--------------------------------------------------------------------------------------------
	//Ende des Accelerometers
//--------------------------------------------------------------------------------------------
}//End of Class
 
Kannst du bitte deine activity_main.xml posten?

Sent from my GT-I9100 using Android-Hilfe.de App
 
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginRight="135dp"
        android:layout_marginTop="39dp"
        android:layout_toLeftOf="@+id/Starten"
        android:text="@string/poseidon_v2_test"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/acceleration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="117dp"
        android:layout_marginTop="129dp"
        android:text="@string/x_y_"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <ToggleButton
        android:id="@+id/Starten"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/acceleration"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="39dp"
        android:layout_marginRight="111dp"
        android:textOff="Aus"
        android:textOn="An" />

</RelativeLayout>
 
Wenn du "finish()" bzw den ganzen onClickListener auskommentierst (// oder /** und **/) funktioniert der togglebutton dann?

Sent from my GT-I9100 using Android-Hilfe.de App
 
glaube du solltest nicht .setOnclicklistener nutzen sondern onToggle...
 
Kannst du den Button nicht togglen oder funktioniert das stoppen des Accelerometers nicht?
 
Der button bleibt bei ihm im "on" zustand

Sent from my GT-I9100 using Android-Hilfe.de App
 
Dann einfach mal, wie schon gesagt wurde das "finish()" weglassen.
Wüsste nicht, was da stören sollte sonst.
 
Ich habe das finish() heraus gelöscht, doch das problem bleibt.
Der ToggleButton wechselt seinen Zustand, doch der Accelerometer bleibt an und geht nicht aus. Ich wollte, dass wenn der Button wieder auf "aus" ist, der Accelerometer auch Stop, aber wie gesagt der TextView zeigt mir immer noch an das dieser läuft.
 
Dann musst du in onSensorChanged prüfen, ob der ToggleButton auf "ein" ist. Wenn ja schreibst du die Werte wie gehabt rein, wenn nicht passiert einfach nüx.
Also hier:
Code:
@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		double X=(double)(event.values[0]);
		int XAchse=(int)(Math.round(X));
		double Y=(double)(event.values[1]);
		int YAchse=(int)(Math.round(Y));
		
		acceleration.setText("X: "+XAchse +"/n"+" Y: "+YAchse);
	}
 
Danke danke danke, hat funktioniert. Ich habe den Schalter als boolean zum Freischalten gemacht.

Danke nochmals
 

Ähnliche Themen

M
Antworten
9
Aufrufe
791
mkuz24
M
4
Antworten
10
Aufrufe
1.081
jogimuc
J
Zurück
Oben Unten