2016-04-12 11 views
0

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 wollen
import 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> 
+0

Sie könnten versuchen, den 'TextView's in' public void onAccelerationChanged (float x, float y, float z) {// TODO Auto-Update generated method stub } ' – user0815

+0

@ user0815 Danke, funktioniert wie Charme :) –

+0

ich postete es als eine Antwort;) – user0815

Antwort

0

Sie könnten versuchen, die Textviews in

zu aktualisieren

public void onAccelerationChanged(float x, float y, float z) { // TODO Auto-generated method stub }

0

Sie sind in die falsche Ids verwenden, wenn Sie Ihre Ansicht zu finden

android.R.id.message 

Verwenden Sie die Id auf dem xml gesetzt.

textX 
textY 
textZ 
0

Verwendung dieser String zum Anzeigen in Textview

mTxtViewX.setText("text to be displayed"); 
    mTxtViewY.setText("text to be displayed"); 
    mTxtViewZ.setText("text to be displayed"); 

Warnung prüfen, ob alle Textview korrekt auf sie Bezug in findViewById angebracht hat

0

Sie haben die richtigen Textview wie folgt zu finden:

TextView mTxtViewX = (TextView) ((MainActivity)aContext).findViewById(R.id.textX); 
Verwandte Themen