Facultatea de Automatica Calculatoare si Electronica Universitatea din Craiova Proiect la Sisteme Incorporate Android Timer Example Student : Sirbu Iulian Profesor: sl. dr. Nicoale Enescu -2014-
Facultatea de Automatica Calculatoare si Electronica
Universitatea din Craiova
Proiect la Sisteme Incorporate
Android Timer Example
Student : Sirbu Iulian Profesor: sl. dr. Nicoale Enescu
-2014-
Descriere proiectului :
Aplicatia este un simplu cronometru. Acesta are controale simple, rapide si o interfața intuitivă.Poate fi personalizat în mod liber. Este exact, fiabil si foarte usor de utilizat .În acest exemplu, vom crea o aplicație simplă Android Timer. In realizarea acestei aplicatii vom utiliza unele idei și instrumente de bază, cum ar fi Handler, pe care le putem folosi în multe cazuri, în aplicațiile noastre. Vom folosi Handler pentru partea interesanta a acestui exemplu, care este actualizarea valorii timerului.Pentru acest tutorial, vom folosi următoarele instrumente într-o platformă Windows pe 64 de biți:
JDK 1.7 Eclipse 4.2 Juno Android 4.2 SKD
1. Creați un nou proiect Android
Deschidem Eclipse IDE și selectam File -> New -> Project -> Android -> Project Android Application. Trebuie să specificați numele aplicație, numele proiectului și numele pachetelor în câmpurile de text corespunzătoare și apoi faceți clic pe Următorul.
În fereastra următoare ne vom asigura ca opțiunea "Create activity" este selectata, în scopul de a crea o nouă activitate pentru proiectul noastra, și facem clic pe Următorul. Acest lucru este opțional, deoarece putem crea o nouă activitate si după crearea proiectului, dar puteți face totul într-un singur pas.
Selectați "BlankActivity" și faceți clic pe Următorul.
Ni se va cere să specificam anumite informații despre noua activitate. În câmpul de text Name Layout trebuie să specificam numele fișierului care va conține descrierea aspectului de aplicatiei . În cazul nostru va fi creat res/layout/main.xml. Apoi, facem clic pe Finish.
2. Adăugarea de resurse
Vom utiliza Package Explorer din Eclipse pentru a naviga la res/values/strings.xml
Când vom deschide fișierul strings.xml, Eclipse va afișa resurse grafice View editor:
Acesta este un instrument frumos și ușor pe care il putem utiliza pentru a adăuga mai multe resurse ca siruri de caractere, numere întregi, valori de culoare, etc . Pentru aplicatia noastra noi vom lucra în mod tradițional și vom edita fișierul strings.xml
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">Cronometru</string> <string name="action_settings">Settings</string> <string name="hello_world">Cronometru</string> <string name="timerVal">00:00:00</string> <string name="timerMem">00:00:00</string> <string name="pauseButtonLabel">Pauza</string> <string name="resetButtonLabel">Stop</string> <string name="startButtonLabel">Start</string> <string name="MemButtonLabel">Memorare</string></resources>
Tocmai am creat unele resurse șir pe care le putem folosi în multe feluri și în multe locuri în aplicația noastră.
3. Crearea aspectului principal al aplicației
Acesta se face in fisierul res/layout/main.xml
<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:background="@drawable/samsung" >
<TextView android:id="@+id/timerValue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"
android:layout_marginTop="21dp" android:text="@string/timerVal" android:textColor="#ffffff" android:textSize="50sp" />
<TextView android:id="@+id/timerMemory" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="90dp" android:text="@string/timerMem" android:textColor="#ffffff" android:textSize="50sp" />
<Button android:id="@+id/MemoryButton" android:layout_width="100dp" android:layout_height="45dp" android:layout_alignLeft="@+id/resetButton" android:layout_alignParentBottom="true" android:layout_alignRight="@+id/resetButton" android:layout_marginBottom="48dp" android:text="@string/MemButtonLabel" />
<Button android:id="@+id/startButton" android:layout_width="100dp" android:layout_height="45dp" android:layout_above="@+id/pauseButton" android:layout_alignLeft="@+id/timerMemory" android:layout_alignRight="@+id/timerMemory" android:text="@string/startButtonLabel" />
<Button android:id="@+id/resetButton" android:layout_width="100dp" android:layout_height="45dp" android:layout_above="@+id/MemoryButton" android:layout_alignLeft="@+id/pauseButton" android:layout_alignRight="@+id/pauseButton" android:layout_marginBottom="27dp" android:text="@string/resetButtonLabel" />
<Button android:id="@+id/pauseButton" android:layout_width="100dp" android:layout_height="45dp" android:layout_above="@+id/resetButton" android:layout_alignLeft="@+id/startButton" android:layout_alignRight="@+id/startButton" android:text="@string/pauseButtonLabel" />
</RelativeLayout>4. Code
Codul aplicatiei
package com.example.androidtimer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button startButton;
private Button pauseButton;
private Button resetButton;
private Button MemoryButton;
private TextView timerValue;
private TextView timerMemory;
private long startTime = 0L;
private long resetTime = 0L;
private long memoryTime = 0L;
private Handler customHandler = new Handler();
private Handler customHandler2 = new Handler();
long timeInMilliseconds = 0L;
long timeSwapBuff = 0L;
long updatedTime = 0L;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timerValue = (TextView) findViewById(R.id.timerValue);
timerMemory = (TextView) findViewById(R.id.timerMemory);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startTime = SystemClock.uptimeMillis();
customHandler.postDelayed(updateTimerThread, 0);
}
});
pauseButton = (Button) findViewById(R.id.pauseButton);
pauseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
timeSwapBuff += timeInMilliseconds;
customHandler.removeCallbacks(updateTimerThread);
}
});
MemoryButton = (Button) findViewById(R.id.MemoryButton);
MemoryButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
memoryTime = updatedTime;
customHandler2.postDelayed(memTimerThread, 0);
}
});
resetButton = (Button) findViewById(R.id.resetButton);
resetButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
timeSwapBuff = resetTime;
timeInMilliseconds = resetTime;
updatedTime = resetTime;
customHandler.removeCallbacks(updateTimerThread);
}
});
}
private Runnable updateTimerThread = new Runnable() {
public void run() {
timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
updatedTime = timeSwapBuff + timeInMilliseconds;
int secs = (int) (updatedTime / 1000);
int mins = secs / 60;
secs = secs % 60;
int milliseconds = (int) (updatedTime % 1000);
timerValue.setText("" + mins + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
customHandler.postDelayed(this, 0);
}
};
private Runnable memTimerThread = new Runnable() {
public void run() {
int secs = (int) (memoryTime / 1000);
int mins = secs / 60;
secs = secs % 60;
int milliseconds = (int) (memoryTime % 1000);
timerMemory.setText("" + mins + ":"
+ String.format("%02d", secs) + ":"
+ String.format("%03d", milliseconds));
customHandler.postDelayed(this, 0);
}
};
}
5. Executarea aplicației
Acesta este ecranul principal al aplicației noastre. Aspectul ecranului principal este descris in main.xml: