Professional Documents
Culture Documents
Creative Commons
slobodno smijete:
U sluaju daljnjeg koritenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji nain da to uinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta mogue je odstupiti, ako dobijete doputenje nositelja autorskog prava. Nita u ovoj licenci ne naruava ili ograniava autorova moralna prava.
Tekst licencije preuzet je s http://creativecommons.org/.
14. 11. 2012.
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
Ponavljanje
Na prethodnom predavanju smo pokazali kako (eksplicitno i implicitno) putem namjere (Intent) moemo pozvati jednu aktivnost (Activity) iz druge Dijelovi namjere
Komponenta (Component) eksplicitno se specificira komponenta koja obrauje namjeru, umjesto implicitnog zakljuivanja na osnovu akcije, kategorije i (tipa) podataka Akcija (Action) String koji oznaava akciju koja se eli napraviti ili se dogodila pa se obavjetava o njoj Kategorija (Category) dodatne informacije o vrsti komponente koja obrauje ovu namjeru Podaci (Data) glavni podaci u obliku URI-ja Tip (Type) tip podataka u obliku MIME-a Dodaci (Extras) pomoni podaci koji se nadodaju namjeri
14. 11. 2012.
Putem namjera razailju se dogaaji koji su potencijalno zanimljivi drugim aplikacijama Primaju dogaaje (tj. namjere) od interesa i reagiraju na njih Moraju se pretplatiti (tj. registrirati) za primanje dogaaja od interesa Dogaaji od interesa se definiraju s filtrom namjera (Intent Filter)
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
Objavljivanje
static final String SPECIAL_EVENT = "hr.fer.tel.ruazosa.events.SPECIAL"; Intent intent = new Intent(SPECIAL_EVENT); sendBroadcast(intent);
Primanje namjere
public class SpecialBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //TODO Process intent } }
Glavno procesiranje se ne smije izvravati u ovoj metodi Ova metoda obavlja samo pomono procesiranje
@Override public void onReceive(Context context, Intent intent) { Intent newIntent = new Intent(context, ReceiverActivity.class); newIntent.putExtra("message", "Receiving special event: " + new Date().toString()); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(newIntent); } }
14. 11. 2012.
Objavljene namjere e biti primljene samo u sluaju kada se izvodi komponenta koja se pretplatila Inae, ova komponenta ne moe primiti objavljene namjere Ovo pretplaivanje se najee koristi kada se eli aurirati prikaz GUI-ja prilikom primanje namjere od interesa Treba se pretplatiti unutar metode onResume, a otkazati pretplatu (radi utede resursa) u metodi onPause Ovako definiran pretplatnik je uvijek aktivan Prima objavljene namjere i kada aplikacija nije pokrenuta
Pretplaivanje u manifestu
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
<receiver android:name=".SpecialReceiver" > <intent-filter android:priority=100> <action android:name="hr.fer.tel.ruazosa.predavanje6.SP ECIAL_EVENT" /> </intent-filter> </receiver>
sendOrderedBroadcast(intent, null);
sendStickyBroadcast(intent); removeStickyBroadcast(intent);
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
lbm.sendBroadcast(new Intent(LOCAL_ACTION));
lbm.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) {//TODO Process intent} }, new IntentFilter(LOCAL_ACTION));
14. 11. 2012.
1. Stvori listu filtara svih aplikacija i usluga na ureaju 2. Ukoliko kategorija ili akcija filtra ne odgovara namjeri, makni ga iz liste 3. Usporedi svaki dio podatka (URI-ja i tipa) namjere s filtrom i makni filtar iz liste ako nae bilo koju razliku 4. a) Ako namjera implicitno pokree aktivnost, korisniku ponudi izbor svih onih koje zadovoljavaju namjeru b) Ako je namjera objavljena, isporui je svim pretplatnicima iji filtri je zadovoljavaju, pri tome uzmi u obzir prioritet primatelja
Sve aktivnosti koje ele primati implicitne namjere moraju imati definiranu sljedeu kategoriju u svom filtru namjera:
android.intent.category.DEFAULT
akciju MAIN glavna ulazna toka aplikacije i kategoriju LAUNCHER prikaz na zaslonu aplikacija koje se mogu pokrenuti na ureaju android.intent.action.MAIN android.intent.category.LAUNCHER
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
Fragmenti
Ideja je da se aktivnost (tj. njen prikaz) se dijeli na manje komponente fragmente Glavne karakteristike fragmenata
Enkapsuliraju dijelove korisnikog suelja Mogu se jednostavno ponovno koristiti Svaki ima svoj vlastiti ivotni ciklus Dinamiki se mogu dodavati i uklanjati Suelje se lake prilagoava ureaju Za razliku od aktivnosti ne trebaju se registrirati u manifestu
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //zamjena fragmentTransaction.replace(R.id.myfragment_container, new MyFragment()); //uklanjanje Fragment myfragment = fragmentManager.findFragmentById(R.id.myfragment_container); fragmentTransaction.remove(myfragment); fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
findFragmentById(R.id.myfragment_container) findFragmentByTag(getString(R.string.myfragment_tag))
Primjer dohvaanja gumba Fragmenti ne bi trebali komunicirati direktno, ve bi aktivnost trebala biti posrednik u komunikaciji
Odrava se slaba meusobna povezanost fragmenata
Ukoliko fragment treba o neemu obavijestiti aktivnost, preporuka je da aktivnost implementira odgovarajue suelje koje e fragment pozvati po potrebi
14. 11. 2012.
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
http://code.google.com/p/openintents/downloads/lis t?q=sensorsimulator Raspakirati arhivu sensorsimulator-2.0-rc1.zip Pokrenuti desktop aplikaciju sensorsimulator-2.0-rc1 \bin\sensorsimulator-2.0-rc1.jar Kopirati sensorsimulator-2.0-rc1 \bin\ SensorSimulatorSettings-2.0-rc1.apk u androidsdk\tools Instalirati apk preko konzole: android-sdk\tools> ..\platform-tools\adb.exe install SensorSimulatorSettings-2.0-rc1.apk
Pokrenuti SensorSimulatorSettings na ureaju Prepisati IP adresu i port iz desktop aplikacije U aplikaciji na ureaju kliknuti Connect u tabu Testing
14. 11. 2012.
Kopirati sensorsimulator-2.0-rc1\lib\sensorsimulator-lib2.0-rc1.jar u mapu libs Eclipse projekta Dodati ovu datoteku u Java Build Path projekta Dodati dozvolu u manifest Primjer izlistavanja svih dostupnih senzora
<uses-permission android:name="android.permission.INTERNET"/>
String service_name = Context.SENSOR_SERVICE; SensorManagerSimulator sensorManager = SensorManagerSimulator.getSystemService(ListSensorsActivity.this , service_name); sensorManager.connectSimulator(); List<Integer> allSensors = sensorManager.getSensors(); //list all available sensors LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_list); for(int i = 0; i < allSensors.size(); i++) { //Sensor sensor = sensorManager.getDefaultSensor(allSensors.get(i)); TextView textView = new TextView(ListSensorsActivity.this); textView.setText((i+1) + ". " + SensorNames.getSensorName(allSensors.get(i))); layout.addView(textView); }
14. 11. 2012.
LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_list); for(int i = 0; i < allSensors.size(); i++) { Sensor sensor = allSensors.get(i); TextView textView = new TextView(ListSensorsActivity.this); textView.setText(i + 1 + ". " + sensor.getName()); layout.addView(textView); }
Kao i kod dogaaja koji su vezani uz korisnike akcije na suelju, potrebno je definirati sluaa senzorskih dogaaja
public class AccelerometerListener implements SensorEventListener { public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub }
Jedna metoda prati promjene senzora, a druga promjene u tonosti njegova oitanja
14. 11. 2012.
Sadraj predavanja
Uvod i ponavljanje prethodnog predavanja Elementi grafikog suelja u Androidu
Objavljivanje, primanje i pretplaivanje na namjere Dodatni tipovi namjera Filtriranje i usporedba namjera s filtrima Fragmenti (Fragments)
Kao i kod senzora potrebno je definirati sluaa dogaaja vezanih uz promjenu lokacije
public void onLocationChanged(Location location) { updateWithNewLocation(location); } public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }
14. 11. 2012.
Slua dogaaja kao privatni atribut Registracija sluaa lok. dogaaja u metodi onCreate
String provider = Context.LOCATION_SERVICE; LocationManager locationManager = (LocationManager) getSystemService(provider); locationManager.requestLocationUpdates(LocationManager.GPS_PROVI DER, 0, 0, gpsListener); locationManager.removeUpdates(gpsListener);
14. 11. 2012.
<uses-permission android:name=android.permission.ACCESS_FINE_LOCATION/>