Documente Academic
Documente Profesional
Documente Cultură
Ierarhia de fisiere:
\META-INF
\lib
\res
\assets
AndroidManifest.xml
DEX files:
-Header (CheckSum,SHA,..)
-String Indexes
-Type Indexex
-Prototype Indexes
-Field Indexes
-Method Indexes
-Class Definition
-Data (dex code,strings, classed )
Fiecare aplicatie Android poate porni alta aplicatie Android prin intermediul
Intent-urilor
Fiecare aplicatie ruleaza in propriul sau proces , fiecare avand cate un Dalvik
VM .
Fiecare proces are un rank. Cu cat este mai important procesul cu atat este mai
mica sansa sa fie oprit (KILL) de catre sistem
Sunt 5 tipuri de procese:
1.Foreground process (Proces de prim-plan)
-o Activitate ce interactioneaza cu user-ul
2. Visible process
3. Service process
-are un serviciu
4. Background process
- o activitate ce a fost oprita
5. Empty process
-folosit in scop de cache-ing
AndroidManifest contine:
- permisiunile
- lista de activitati/servicii/receiveri/provideri
Curs2
=> setContentView(R.layout.main_activity)
->seteaza layout-ul activitatii
You can shrink all columns by using the value "*" instead.
Relative Layout:
->layout_toRightOf :Positions the left edge of this view to the right of the given
anchor view ID
->layout_toLeftOf
->layout_above :Positions the bottom edge of this view above the given anchor view
ID
->layout_below : ma pozitione sub elementul dat ca referinta
->layout_alignLeft: Makes the left edge of this view match the left edge of the
given anchor view
->layout_alignTop
->layout_alingRight
->layout_alignBottom
->layout_alignParentLeft="true/false"->colt
stanga_sus_element=colt_stanga_sus_parint
->layout_alignParentRight
->layout_alingParentTop
->layout_alignParentBottom
->layout_marginLeft
->layout_marginRight => setez unde sa fie marginile
->layout_marginTop
->layout_marginBottom
Curs 3
Putem defini style-uri , in loc sa scrie tot style-ul in-line , in scriem intr-un
fisier separt apoi il setam ca si stim elementului
<Button
style=@style/myStyle
/>
Ex:
</style>
Stilul scris in-line are o prioritate mai ridicata decat scris intr-un fisier
'Style'
Meniuri
Options Menu
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
2) onOptionsItemSelected(MenuItem item){
item.getItemId() -> pentru a obtine id-ul item-ului de a fost
selectat
return true;
}
Contextual Menus
a) Creez un MenuXML
b) Atribui meniul unui obiect:
Button b1=(Button) findViewById(R.id.button1)
registForContextMenu(b1)
d) onContextItemSelected(MenuItem item){
item.getItemId()
}
Curs4
AlertDialog:
->similarul lui MessageBox
new AlertDialog.Builder(this)
.setTitle()
.setMessage()
.setIcon()
.setPositiveButton("Ok", new DialogInterface.OnClickListener(){})
.setItems(new CharSequence[]{'Item1','Item2','Item3'},new
DialogInteface.OnClickListener({
public void onClick(DialogInterface dialog,int which){
which -> face referire la ce item din lista a fost selectat
}
}))
.setMultipleChoiceItems( new CharSequence[]{'Item 1','Item 2',"Item
3"},
new boolean[] {true,false,true} ->
default checked,
new
DialogInteface.OnClickListener({
public void
onClick(DialogInterface dialog,int which,boolean isSelected){
which -> face referire
la ce item din lista a fost selectat
}
)
)
.setSingleChoiceItems(
new CharSequence[]{'Item 1','Item
2',"Item 3"},
1 -> index-ul item-ului ce va fi
selectat default
new
DialogInteface.OnClickListener({
public void
onClick(DialogInterface dialog,int which,boolean isSelected){
which -> face referire
la ce item din lista a fost selectat
}
)
)
.setView(getLayoutInflater().inflate(R.layout.alert_layout,null))
-> in modul aste ne putem face noi un CUSTOM_ALERT
.setCancelable(false)
-> dezactiveaza optiune de back a butonului fizic
-> default , putem inchide nu AlertDialog prin intermerdiul
apasarii butonului back
.show()
->putem sa nu avem nici un buton , sa avem doar titlul sau doar mesajul
Toast
new
Toast.makeText(context(this),"Mesaj",lungime(Toast.Length_Short,Toast.Length_Long))
.setView(getInflater().inflate(R.layout.toast_layout,null))
-> in acest mod putem creea CustomToasts
.show()
Intent:
-este un obiect ce contine urmatoarele informatii:
-Component name : Componenta ce trebuie sa primeasca acest intent si sa il
proceseze
-Action : Un string cu actiunea ce poate sa o indeplineasca
-Data
-Category
-Extra : Perechi (cheie,valoare) ce sunt transmise intre intent-uri
-Flags
Ex:
Intent intent= new Intent("<action>")
Intent intent= new Intent("<action>",URI)
Intent intent= new Intent(Context,Class)
startActivity(Intent)
startActivityForResult(Intent,requestCode)
-> Activitatea deschisa trebuie sa:
@Override
public void finish(){
Intent data= new Intent();
data.putExtra("Return1","Return value")
setResult(RESULT_OK,data)
super.finish()
}
Intent pentru:
-Folosirea camerei:
MediaStore.Action_Video_Capture
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new
File('....')))
startActivityForResult(imageIntent,1278)
Curs 6.Storage
Sunt 5 metoda de storage pentru sistemele bazare pe Android:
1)SharedPreferences
-> folosim clasa SharedPreferences
-> avem la dispozitie 2 metode ce ne intorc un 'SharedPreferences':
- getSharedPreferences("myprefs",0)
-> trebuie specificat numele preferintei de care avem nevoie
- getPreferences(0)
-> daca am nevoie doar de o preferinte pt fiecare activity
-> fisierul de preferinte va avea acelasi nume ca si Activity-ul
2)InternalStorage
-> fisierele salvate aici pot fi accesate doar de aplicatia care le-a creat
-> odate ce aplicatia a fost dezinstalata , toate fisierele aferente , ce au
fost salvate anterior, vor fi sterse
-> Ex:
FileOutputStream fos=
openFileOutput("internal_file.xml",Context.ModePrivate);
fos.write("test".getBytes());
fos.close();
3) ExternalStorage
-> avem nevoie de permisiunea "WRITE_EXTERNAL_STORAGE"
-> pentru a obtine path-ul catre ExternalStorage:
File path =Environment.getExternalStorageDirectory();
4)SQLLite
-> SQLLiteDatabase db;
SQLLiteOpenHelper helper= new SQLliteOpenHelper(.......) -> trebuie
implementate 2 metode
db=helper.getReadableDatabase();
db=helper.getWritableDatabase();
db.execSQL(".........."");
Curs7.Sensors
SensorManager
Sensor
SensorEvent
SensorEventListener
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
3000, 5, this);
Sound
-> doua modalitati de a utiliza sound managerul din Android
Curs8.Camera
-aceasta poate fi accesata prin intermediul unui intent sau direct prin intermediul
obiectului Camera
-am nevoie de niste permisiuni:
-android.permision.CAMERA
-android.hardware.camera
-android.permision.RECORD_AUDIO (aceasta daca am nevoie sa inregistrez si
sunetul)
Camera.open()
Camera.open(cameraID)
Pasi:
1) Obtin o instanta de tip Camera
2) Preview
3) Take a picture/video
Am nevoie de o clasa:
@Override
public void onPictureTaken(byte[] data,Camera camera){
cameraObject.takePicture(null,null,pictureCallbackObject);
}
}
}
}
Curs9.SMS
Ex:
SmsManager smsManager = SmsManager.getDefault()
smsManager.sendTextMessage(number, null,text,null,null)
Primrea de SMS-uri
-am nevoie de permisiuni
android.permission.RECEIVE_SMS
Create a contact
-am nevoie de urmatoarea permisiune
android:permission.WRITE_CONTACT
Curs10
NotificationCombat.builder=NotificationCompat.Buildet(this)
builder.setContentIntent(pendingIntent)
NotifyManager notificationManager=getSystemService(Notification_Service)
notificationManager.notify(1234,builder.build())
JNI
jobjectArray
jclass = env->FindClass()
jstring = env->NewStringUTF("")
jobject result=env->CallObjectMethod(env,obj,classMethod,txt)