Ich arbeite an einer Android App, wo ich die Beschleunigungsmesser Werte meines Telefons (X, Y, Z) in Textviews anzeigen müssen. Ich habe versucht, es auf Toast anzuzeigen und es funktionierte, konnte es aber nicht für Textviews tun.Wie füge ich einen Wert zu einem TextView auf Android
hier ist mein Code:
/// Das für meine Haupt-Seite:
package com.sourcey.materiallogindemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class MainAccelerometer extends Activity implements AccelerometerListener{
private TextView mTxtViewX;
private TextView mTxtViewY;
private TextView mTxtViewZ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_accelerometer);
mTxtViewX = (TextView) findViewById(R.id.textX);
mTxtViewY = (TextView) findViewById(R.id.textY);
mTxtViewZ = (TextView) findViewById(R.id.textZ);
Intent intent = getIntent();
// Check onResume Method to start accelerometer listener
}
public void onAccelerationChanged(float x, float y, float z) {
// TODO Auto-generated method stub
}
public void onShake(float force) {
// Called when Motion Detected
Toast.makeText(getBaseContext(), "Motion detected",
Toast.LENGTH_LONG).show();
}
@Override
public void onResume() {
super.onResume();
Toast.makeText(getBaseContext(), "onResume Accelerometer Started",
Toast.LENGTH_LONG).show();
//Check device supported Accelerometer senssor or not
if (AccelerometerManager.isSupported(this)) {
//Start Accelerometer Listening
AccelerometerManager.startListening(this);
}
}
@Override
public void onStop() {
super.onStop();
//Check device supported Accelerometer senssor or not
if (AccelerometerManager.isListening()) {
//Start Accelerometer Listening
AccelerometerManager.stopListening();
Toast.makeText(getBaseContext(), "onStop Accelerometer Stoped",
Toast.LENGTH_LONG).show();
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("Sensor", "Service distroy");
//Check device supported Accelerometer senssor or not
if (AccelerometerManager.isListening()) {
//Start Accelerometer Listening
AccelerometerManager.stopListening();
Toast.makeText(getBaseContext(), "onDestroy Accelerometer Stoped",
Toast.LENGTH_LONG).show();
}
}
}
und das ist mein AccelerometerManager Aktivität, wo ich die Anzeige
tun wollenimport android.content.Context;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class AccelerometerManager {
static Context aContext=null;
/** Accuracy configuration */
private static float threshold = 15.0f;
private static int interval = 200;
private static Sensor sensor;
private static SensorManager sensorManager;
// you could use an OrientationListener array instead
// if you plans to use more than one listener
private static AccelerometerListener listener;
/** indicates whether or not Accelerometer Sensor is supported */
private static Boolean supported;
/** indicates whether or not Accelerometer Sensor is running */
private static boolean running = false;
/**
* Returns true if the manager is listening to orientation changes
*/
public static boolean isListening() {
return running;
}
/**
* Unregisters listeners
*/
public static void stopListening() {
running = false;
try {
if (sensorManager != null && sensorEventListener != null) {
sensorManager.unregisterListener(sensorEventListener);
}
} catch (Exception e) {}
}
/**
* Returns true if at least one Accelerometer sensor is available
*/
public static boolean isSupported(Context context) {
aContext = context;
if (supported == null) {
if (aContext != null) {
sensorManager = (SensorManager) aContext.
getSystemService(Context.SENSOR_SERVICE);
// Get all sensors in device
List<Sensor> sensors = sensorManager.getSensorList(
Sensor.TYPE_ACCELEROMETER);
supported = new Boolean(sensors.size() > 0);
} else {
supported = Boolean.FALSE;
}
}
return supported;
}
/**
* Configure the listener for shaking
* @param threshold
* minimum acceleration variation for considering shaking
* @param interval
* minimum interval between to shake events
*/
public static void configure(int threshold, int interval) {
AccelerometerManager.threshold = threshold;
AccelerometerManager.interval = interval;
}
/**
* Registers a listener and start listening
* @param accelerometerListener
* callback for accelerometer events
*/
public static void startListening(AccelerometerListener accelerometerListener)
{
sensorManager = (SensorManager) aContext.
getSystemService(Context.SENSOR_SERVICE);
// Take all sensors in device
List<Sensor> sensors = sensorManager.getSensorList(
Sensor.TYPE_ACCELEROMETER);
if (sensors.size() > 0) {
sensor = sensors.get(0);
// Register Accelerometer Listener
running = sensorManager.registerListener(
sensorEventListener, sensor,
SensorManager.SENSOR_DELAY_GAME);
listener = accelerometerListener;
}
}
/**
* Configures threshold and interval
* And registers a listener and start listening
* @param accelerometerListener
* callback for accelerometer events
* @param threshold
* minimum acceleration variation for considering shaking
* @param interval
* minimum interval between to shake events
*/
public static void startListening(
AccelerometerListener accelerometerListener,
int threshold, int interval) {
configure(threshold, interval);
startListening(accelerometerListener);
}
/**
* The listener that listen to events from the accelerometer listener
*/
private static SensorEventListener sensorEventListener =
new SensorEventListener() {
private long now = 0;
private long timeDiff = 0;
private long lastUpdate = 0;
private long lastShake = 0;
private float x = 0;
private float y = 0;
private float z = 0;
private float lastX = 0;
private float lastY = 0;
private float lastZ = 0;
private float force = 0;
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
// use the event timestamp as reference
// so the manager precision won't depends
// on the AccelerometerListener implementation
// processing time
now = event.timestamp;
x = event.values[0];
y = event.values[1];
z = event.values[2];
// if not interesting in shake events
// just remove the whole if then else block
if (lastUpdate == 0) {
lastUpdate = now;
lastShake = now;
lastX = x;
lastY = y;
lastZ = z;
Toast.makeText(aContext, "No Motion detected", Toast.LENGTH_SHORT).show();
} else {
timeDiff = now - lastUpdate;
if (timeDiff > 0) {
/*force = Math.abs(x + y + z - lastX - lastY - lastZ)
/timeDiff;*/
force = Math.abs(x + y + z - lastX - lastY - lastZ);
if (Float.compare(force, threshold) >0) {
//Toast.makeText(Accelerometer.getContext(), (now-lastShake)+" >= "+interval, 1000).show();
if (now - lastShake >= interval) {
// trigger shake event
listener.onShake(force);
// AXE X
String sx= String.valueOf(x);
Toast toast1=Toast.makeText(aContext,"X="+sx, Toast.LENGTH_SHORT);
TextView mTxtViewX = (TextView) toast1.getView().findViewById(android.R.id.message);
mTxtViewX.setTextColor(Color.GREEN);
//toast1.show();
mTxtViewX.setText(sx);
// AXE Y
String sy= String.valueOf(y);
Toast toast2= Toast.makeText(aContext,"Y="+ sy, Toast.LENGTH_SHORT);
TextView mTxtViewY = (TextView) toast2.getView().findViewById(android.R.id.message);
mTxtViewY.setTextColor(Color.RED);
//toast2.show();
mTxtViewY.setText(sy);
// AXE Z
String sz= String.valueOf(z);
Toast toast3= Toast.makeText(aContext, "Z=" + sz, Toast.LENGTH_SHORT);
TextView mTxtViewZ = (TextView) toast3.getView().findViewById(android.R.id.message);
mTxtViewZ.setTextColor(Color.BLACK);
//toast3.show();
mTxtViewZ.setText(sz);
}
else
{
Toast.makeText(aContext,"No Motion detected", Toast.LENGTH_SHORT).show();
}
lastShake = now;
}
lastX = x;
lastY = y;
lastZ = z;
lastUpdate = now;
}
else
{
Toast.makeText(aContext,"No Motion detected", Toast.LENGTH_SHORT).show();
}
}
// trigger change event
listener.onAccelerationChanged(x, y, z);
}
};
}
und dies ist meine XML-Datei
<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"
tools:context=".MainAccelerometer" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/primary_dark"
android:text="Shake/Tilt Your Phone To Get Accelerometer Motion Alerts"
android:id="@+id/textView"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true" />
<TextView android:id="@+id/textX"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:background="@color/base"
android:gravity="center"
android:textSize="16dip"
android:layout_above="@+id/textY"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView android:id="@+id/textY"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:background="@color/abc_search_url_text_normal"
android:gravity="center"
android:textSize="16dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="166dp" />
<TextView android:id="@+id/textZ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:background="@color/accent_material_dark"
android:gravity="center"
android:textSize="16dip"
android:layout_above="@+id/textX"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
Sie könnten versuchen, den 'TextView's in' public void onAccelerationChanged (float x, float y, float z) {// TODO Auto-Update generated method stub } ' – user0815
@ user0815 Danke, funktioniert wie Charme :) –
ich postete es als eine Antwort;) – user0815