Android

Alle Arbeiten wurden unter Android Studio 0.2.x (basiert auf JetBrains) erstellt. Basis ist das SDK der 18er API (Android 4.3). Diese ist in den meisten Fällen kompatibel zu älteren APIs (bis API 7 - Android 2.1) und zu Eclipse. Allerdings kann es in vereinzelt zu Kompatibilitäts Problemen kommen!

Einrichtung

Zu Beginn sollte sichergestellt werden, dass das Java Development Kit (JDK) vorhanden ist. Wenn nicht, kann dieses bei Oracle heruntergeladen werden.

Nach der Installation von Android Studio kann es unter Windows vorkommen, dass das Programm nicht startet. In diesem Fall muss unter Systemsteuerung/System/Erweiterte Systemeinstellungen, Reiter Erweitert/Umgebungsvariablen im Bereich Systemvariablen eine solche angelegt werden. Hierzu einfach unten auf Neu klicken und für den Namen JDK_HOME eintragen. Für den Wert, den Pfad zum JDK (z. B. C:\Program Files\Java\jdk1.7.0_21).

 

 

Beispiel-Programme

Die folgenden Beispiele benötigen jeweils zwei Dateien. die *.java, welche den Programmcode beinhaltet und sich im Projektverzeichnis PROJEKTNAME/src/main/java/com.BEZEICHNUNG.PROJEKTNAME/.

Die *.xml (meist main.xml oder activity_main.xml) erstellt das layout der Programmseite. Diese befindet sich in PROJEKTNAME/src/main/res/layout/.

Button Klick

buttonfeedback.java

package com.tum.buttonfeedback;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class ButtonFeedback extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void goButtonClicked(View v) {     //bei Kiick
    	tToast("Button gedrueckt!");              //Popup Ausgabe
    }

    private void tToast(String s) {
        Context context = getApplicationContext();
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast.makeText(context, s, duration);
        toast.show();
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

<Button android:layout_height="wrap_content"
 android:layout_width="wrap_content" android:text="drück mich!"
 android:onClick="goButtonClicked" android:id="@+id/goButton"/>
</LinearLayout>

SeekBar

SeekbarTest.java

package com.tum.seekbartest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class SeekbarTetst extends Activity implements OnSeekBarChangeListener {
    private SeekBar bar;
    private TextView textProgress,textAction;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // load the layout
        setContentView(R.layout.activity_main);
        bar = (SeekBar)findViewById(R.id.seekBar1); // erstelle das Objekt Seekbar
        bar.setOnSeekBarChangeListener(this);       // setze seekbar listener
        textProgress = (TextView)findViewById(R.id.textViewProgress);
        textAction = (TextView)findViewById(R.id.textViewAction);

    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        textProgress.setText("Wert: "+progress);    //zeigt den wert der SeekBar von 0 bis 100 an
        textAction.setText("laeuft");               //wird während der Bewegung angezeigt
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        textAction.setText("beruehrt");              //zeigt berührung der SeekBar (ohne bewegung) an

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        seekBar.setSecondaryProgress(seekBar.getProgress());
        textAction.setText("nicht beruehrt");        //zeigt an dass SeekBar nicht berührt wird
    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/relativeLayout1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
            android:text="progress"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:id="@+id/textViewProgress"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"/>

    <TextView
            android:text="action"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:id="@+id/textViewAction"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_below="@+id/textViewProgress"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="40dp"/>

    <SeekBar
            android:id="@+id/seekBar1"
            android:max="100"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView1"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="30dp"/>

</RelativeLayout>

Accelerometer

SensorTest.java

package com.tum.sensortest;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class SensortTest extends Activity implements SensorEventListener {
    private SensorManager sensorManager;

    TextView xCoor; // deklariert X-Achse Objekt
    TextView yCoor; // deklariert Y-Achse Objekt
    TextView zCoor; // deklariert Z-Achse Objekt

    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        xCoor=(TextView)findViewById(R.id.xcoor); // erstellt X-Achse Objekt
        yCoor=(TextView)findViewById(R.id.ycoor); // erstellt Y-Achse Objekt
        zCoor=(TextView)findViewById(R.id.zcoor); // erstellt Z-Achse Objekt

        sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),      //fügt listener hinzu
                SensorManager.SENSOR_DELAY_GAME);

		    //SENSOR_DELAY_FASTEST schnellste Datenrate für Sensordaten (hoher akkuverbrauch
		    //SENSOR_DELAY_GAME	 primär für spiele gedacht (noch immer sehr schnell, weniger akku lastig)
		 	//SENSOR_DELAY_NORMAL	 standard, zb. für bidschirm ausrichten (bricht stark ein bei fixer bildschirm position)
    }

    public void onAccuracyChanged(Sensor sensor,int accuracy){
    //sollte sich mal die genauigkeit des Sensors ändern, kommt hier was rein. kommt in der praxis fast nie vor.
    }

    public void onSensorChanged(SensorEvent event){             //bei Änderung der Werte

        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){  //Sensortyp prüfen

            float x=event.values[0];    //Array-Elemente den Achsen zuordnen
            float y=event.values[1];
            float z=event.values[2];

            xCoor.setText("X: "+x);     //Datenausgabe
            yCoor.setText("Y: "+y);
            zCoor.setText("Z: "+z);
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

    <TextView
        android:id="@+id/xcoor"
        android:text="X Coordinate: "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/ycoor"
        android:text="Y Coordinate: "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/zcoor"
        android:text="Z Coordinate: "
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>