From e845195e9bf496acc4bf3f1772babf270541f382 Mon Sep 17 00:00:00 2001 From: Philipp Wo Date: Fri, 10 May 2019 18:50:32 +0200 Subject: [PATCH] lab done --- AirKoality/app/src/main/AndroidManifest.xml | 5 ++ .../fhj/airkoality/AirKoalityApplication.java | 32 +++++++++ .../airkoality/service/LocationService.java | 71 +++++++++++++++++++ .../airkoality/ui/activity/MainActivity.java | 43 +++++++++++ .../src/main/res/drawable/ic_location_off.xml | 5 ++ .../src/main/res/drawable/ic_location_on.xml | 5 ++ .../drawable/ic_phone_android_black_24dp.xml | 5 ++ .../app/src/main/res/menu/main_menue.xml | 11 +++ README.md | 17 ++++- 9 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 AirKoality/app/src/main/java/at/fhj/airkoality/AirKoalityApplication.java create mode 100644 AirKoality/app/src/main/java/at/fhj/airkoality/service/LocationService.java create mode 100644 AirKoality/app/src/main/res/drawable/ic_location_off.xml create mode 100644 AirKoality/app/src/main/res/drawable/ic_location_on.xml create mode 100644 AirKoality/app/src/main/res/drawable/ic_phone_android_black_24dp.xml create mode 100644 AirKoality/app/src/main/res/menu/main_menue.xml diff --git a/AirKoality/app/src/main/AndroidManifest.xml b/AirKoality/app/src/main/AndroidManifest.xml index 2510f05..4ed3681 100644 --- a/AirKoality/app/src/main/AndroidManifest.xml +++ b/AirKoality/app/src/main/AndroidManifest.xml @@ -4,9 +4,13 @@ + + + + Build.VERSION_CODES.O) { + + NotificationChannel locationServiceChannel = new NotificationChannel( + CHANNEL_ID, + "Location Service Channel", + NotificationManager.IMPORTANCE_LOW); + NotificationManager manager = getSystemService(NotificationManager.class); + manager.createNotificationChannel(locationServiceChannel); + } + + + } +} diff --git a/AirKoality/app/src/main/java/at/fhj/airkoality/service/LocationService.java b/AirKoality/app/src/main/java/at/fhj/airkoality/service/LocationService.java new file mode 100644 index 0000000..fe9ab56 --- /dev/null +++ b/AirKoality/app/src/main/java/at/fhj/airkoality/service/LocationService.java @@ -0,0 +1,71 @@ +package at.fhj.airkoality.service; + +import android.app.Notification; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.NotificationCompat; +import android.support.v4.content.ContextCompat; +import android.util.Log; + +import at.fhj.airkoality.AirKoalityApplication; +import at.fhj.airkoality.R; +import at.fhj.airkoality.ui.activity.MainActivity; + + +public class LocationService extends Service { + + private String TAG = "LocationService"; + + private Notification notification; + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + + Log.d(TAG, "Service started"); + startForeground(1337,notification); + return START_STICKY; + + } + + @Override + public void onCreate(){ + Log.d(TAG, "Service created"); + + super.onCreate(); + setupNotification(); + + } + + @Override + public void onDestroy(){ + Log.d(TAG, "Service destroyed"); + super.onDestroy(); + + } + + + private void setupNotification() { + Intent notificationIntent = new Intent(this, MainActivity.class); + + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); + + notification = new NotificationCompat.Builder(this, AirKoalityApplication.CHANNEL_ID) + .setContentText("Updating location") + .setContentTitle("AirKoality-lab Location Service") + .setSmallIcon(R.drawable.ic_phone_android_black_24dp) + .setContentIntent(pendingIntent).build(); + } + + + + +} diff --git a/AirKoality/app/src/main/java/at/fhj/airkoality/ui/activity/MainActivity.java b/AirKoality/app/src/main/java/at/fhj/airkoality/ui/activity/MainActivity.java index 6505bc2..ad7069f 100644 --- a/AirKoality/app/src/main/java/at/fhj/airkoality/ui/activity/MainActivity.java +++ b/AirKoality/app/src/main/java/at/fhj/airkoality/ui/activity/MainActivity.java @@ -11,6 +11,8 @@ import android.support.design.widget.BottomNavigationView; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; @@ -26,6 +28,7 @@ import at.fhj.airkoality.db.room.AirKoalityDB; import at.fhj.airkoality.model.Location; import at.fhj.airkoality.network.HttpsGetTask; import at.fhj.airkoality.network.RequestCallback; +import at.fhj.airkoality.service.LocationService; import at.fhj.airkoality.ui.fragment.LocationListFragment; import at.fhj.airkoality.ui.fragment.MapFragment; @@ -155,6 +158,46 @@ public class MainActivity extends AppCompatActivity implements RequestCallback { } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.main_menue, menu); + return true; + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + switch (item.getItemId()){ + case R.id.action_service_on: + startLocationService(); + return true; + case R.id.action_service_off: + stopLocationService(); + return true; + default: + return false; + } + + + } + + private void startLocationService(){ + Intent intent = new Intent(this, LocationService.class); + startService(intent); + +} + + private void stopLocationService(){ + + Intent intent = new Intent(this, LocationService.class); + stopService(intent); + + } + private void updateFragments() { runOnUiThread(() -> { locationListFragment.refresh(); diff --git a/AirKoality/app/src/main/res/drawable/ic_location_off.xml b/AirKoality/app/src/main/res/drawable/ic_location_off.xml new file mode 100644 index 0000000..3d0314d --- /dev/null +++ b/AirKoality/app/src/main/res/drawable/ic_location_off.xml @@ -0,0 +1,5 @@ + + + diff --git a/AirKoality/app/src/main/res/drawable/ic_location_on.xml b/AirKoality/app/src/main/res/drawable/ic_location_on.xml new file mode 100644 index 0000000..e054362 --- /dev/null +++ b/AirKoality/app/src/main/res/drawable/ic_location_on.xml @@ -0,0 +1,5 @@ + + + diff --git a/AirKoality/app/src/main/res/drawable/ic_phone_android_black_24dp.xml b/AirKoality/app/src/main/res/drawable/ic_phone_android_black_24dp.xml new file mode 100644 index 0000000..a930a79 --- /dev/null +++ b/AirKoality/app/src/main/res/drawable/ic_phone_android_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/AirKoality/app/src/main/res/menu/main_menue.xml b/AirKoality/app/src/main/res/menu/main_menue.xml new file mode 100644 index 0000000..0768208 --- /dev/null +++ b/AirKoality/app/src/main/res/menu/main_menue.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 558262e..6d838d1 100644 --- a/README.md +++ b/README.md @@ -72,4 +72,19 @@ RecyclerView -> Items der View wiederverwendbar machen - SQ-Lite implementierung angeschaut aber unser Projekt wird auf Room aufgesetzt - Room arbeitet mit Annotationen -> viel weniger Code im vergleich zu SQ-Lite - Network - - HttpsGet Methoden implementiert (waren vorgegeben) \ No newline at end of file + - HttpsGet Methoden implementiert (waren vorgegeben) + + +## 10.05.2019 - Lab 5 + +- Unterschied Service - Background Task + - Service: Wenn etwas im Hintergrund laufen muss (z.B. Nuki App) + - BT: z.B Musik Player, immer wenn der User nicht mit der App Interagieren will + +Service sollte immmer eine Aktion die er ausführt in einem extra Thread auslagern. + +Service wird im Manifest deklariert +Um einen Foregroundservice zu starten muss das innerhalb von 5 Sekunden nach "start Service" (Intent) + + +Notifications benötigen immer einen Channel (ab Android O verfügbar) \ No newline at end of file