Activitate de Laborator
Se dorește implementarea unei aplicații Android, conținând o singură activitate, care să ofere utilizatorilor funcționalitatea necesară pentru formarea unui număr de telefon (PhoneDialer).
1. Să se creeze un proiect Android Studio denumit PhoneDialer.
Se indică detaliile proiectului:
- Application name - Phone Dialer
- Company domain - lab03.eim.systems.cs.pub.ro (se va genera în mod automat Package name cu valoarea ro.pub.cs.systems.eim.lab03.phonedialer)
- Project location - locația directorului de pe discul local unde a fost descărcat depozitul la distanță Laborator03
Se indică platforma pentru care se dezvoltă aplicația Android (se bifează doar Phone and Tablet), iar SDK-ul Android (minim) pentru care se garantează funcționarea este API 24 (Nougat, 7.0).
Vom folosi template-ul Empty View Activity
pentru care se precizează:
- Activity Name (denumirea activității) -
PhoneDialerActivity
; - Layout Name (denumirea fișierului XML din
res/layout
în care va fi construită interfața grafică) -activity_phone_dialer.xml
.
2. În fișierul activity_phone_dialer
din directorul res/layout
se construiește interfața grafică folosind:
- editorul vizual (Design)
- editorul XML (Text)
Aceasta va conține:
- un obiect de tip
EditText
, care nu poate fi editat manual de utilizator, în care se va afișa numărul de telefon; - 10 obiecte de tip
Button
corespunzătoare celor 10 cifre (0..9); - 2 obiecte de tip
Button
corespunzătoare caracterelor speciale*
și#
; - un obiect de tip
ImageButton
pentru operaţia de editare a numărului de telefon, prin revenirea la caracterul anterior, în cazul în care s-a greșit; - 2 obiecte de tip
ImageButton
pentru operaţiile de formare a numărului de telefon, respectiv de închidere.
Pentru iconite, va recomandam flaticon.
Pentru dispunerea controalelor în cadrul interfeței grafice se va folosi
un mecanism de tip LinearLayout
cu orientare verticală, iar tastatura
virtuală va fi realizată printr-un obiect de tip GridLayout
cu 6 linii
și 3 coloane.
3. În clasa PhoneDialerActivity
din pachetul
ro.pub.cs.systems.eim.lab03.phonedialer
, să se implementeze o clasă
Listener
pentru tratarea evenimentelor de tip Click
.
- pentru butoanele ce conțin cifre sau caracterele
*
/#
, se va adăuga simbolul corespunzător la numărul de telefon care se dorește format; - pentru butonul de corecție, se va șterge ultimul caracter (în cazul în care numărul de telefon nu este vid);
- pentru butonul de oprire, se va închide activitatea (se va apela
metoda
finish()
); - pentru butonul de apel, se va invoca intenția care realizează legătura telefonică; întrucât se compilează proiectul Android folosind o versiune mai mare decât Marshmelow (6.0), este necesar să fie solicitată permisiunea de efectuare a apelului telefonic la momentul rulării:
if (ContextCompat.checkSelfPermission(PhoneDialerActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
PhoneDialerActivity.this,
new String[]{Manifest.permission.CALL_PHONE},
Constants.PERMISSION_REQUEST_CALL_PHONE);
} else {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phoneNumberEditText.getText().toString()));
startActivity(intent);
}
Se va defini o clasă internă cu nume, ce implementează
interfața View.OnClickListener
(implementează metoda
public void onClick(View view)
. Instanța acesteia va fi utilizată
pentru toate obiectele de tip buton din cadrul interfeței
grafice.
Pentru a putea apela, în fișierul
AndroidManifest.xml
trebuie să se specifice o permisiune explicită în acest sens:
<uses-permission android:name="android.permission.CALL_PHONE" />
4. Pentru a fi inovativi, in aplicatia noastra vom aduce optiunea sa poti
vedea acceleratia pe axa Ox in timp ce tastezi. Pentru acest lucru, vom adauga
un nou camp de tip TextView
in care vom afisa aceasta acceleratie.
5. Să se gestioneze corespunzător evenimentul de tip rotire a ecranului
- să se blocheze tranziția între modurile portrait și landscape:
-
în fișierul AndroidManifest.xml
<manifest ...> <application ... > <activity ... android:screenOrientation="portrait" ... /> <!-- ... --> </application> </manifest>
-
programatic
@Override protected void onCreate(Bundle onCreateInstanceState) { super.onCreate(onCreateInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); * .. }
-
- Să se definească, în directorul
res/layout-land
o interfață grafică adecvată acestei configurații a dispozitivului de afișare:
În Android Studio, se creează un nou subdirector layout-land
în
directorul res
(din meniul contextual afișat cu right click, se
selectează New → Android resource directory, indicându-se denumirea
sa (layout-land
), tipul de resursă (layout
) și setul codului sursă
pentru care se definește resursa respectivă (main
)):
Se trece în modul de vizualizare Project și în directorul
res/layout-land
se copiază conținutul fișierului
activity_phone.dialer.xml
prin operații de tip copy-paste și se
realizează modificările necesare SAU se poate preciza un fișier nou cu
aceeași denumire.