From 5027665009853406fa1e76bc5a91dd285e8c90ee Mon Sep 17 00:00:00 2001 From: "matthias.schreiner@edu.fh-joanneum.at" Date: Sat, 22 Jun 2019 21:45:14 +0200 Subject: [PATCH] add shit!!!!!!!!!! add LocationService edit Overview Next Step: Fill up the Position from the Location Service --- DailyHelper/app/build.gradle | 10 +- DailyHelper/app/src/main/AndroidManifest.xml | 11 ++ .../dailyhelper/DailyHelperApplikation.java | 24 ++++ .../dailyhelper/service/LocationService.java | 109 ++++++++++++++++++ .../dailyhelper/ui/activity/MainActivity.java | 67 ++++++++--- .../main/res/drawable-v21/ic_location_off.xml | 9 ++ .../main/res/drawable-v21/ic_location_on.xml | 9 ++ .../drawable-v21/ic_refresh_black_24dp.xml | 9 ++ .../app/src/main/res/drawable-v21/ic_star.xml | 9 ++ .../app/src/main/res/drawable/border.xml | 7 ++ .../app/src/main/res/layout/fragment_home.xml | 83 ++++++++++++- DailyHelper/app/src/main/res/menu/main.xml | 10 +- .../app/src/main/res/values/strings.xml | 3 + 13 files changed, 335 insertions(+), 25 deletions(-) create mode 100644 DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java create mode 100644 DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java create mode 100644 DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml create mode 100644 DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml create mode 100644 DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml create mode 100644 DailyHelper/app/src/main/res/drawable-v21/ic_star.xml create mode 100644 DailyHelper/app/src/main/res/drawable/border.xml diff --git a/DailyHelper/app/build.gradle b/DailyHelper/app/build.gradle index b96ba25..1e427ec 100644 --- a/DailyHelper/app/build.gradle +++ b/DailyHelper/app/build.gradle @@ -19,11 +19,17 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:support-media-compat:28.0.0' implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'android.arch.persistence.room:runtime:1.1.1' + implementation 'com.google.android.gms:play-services-location:16.0.0' + implementation 'com.google.android.gms:play-services-maps:16.1.0' + annotationProcessor 'android.arch.persistence.room:compiler:1.1.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.google.maps.android:android-maps-utils:0.5+' } diff --git a/DailyHelper/app/src/main/AndroidManifest.xml b/DailyHelper/app/src/main/AndroidManifest.xml index 0c67ca2..187c725 100644 --- a/DailyHelper/app/src/main/AndroidManifest.xml +++ b/DailyHelper/app/src/main/AndroidManifest.xml @@ -2,13 +2,22 @@ + + + + + + + + + + \ No newline at end of file diff --git a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java new file mode 100644 index 0000000..60c6976 --- /dev/null +++ b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/DailyHelperApplikation.java @@ -0,0 +1,24 @@ +package at.fhj.swd.dailyhelper; + +import android.app.Application; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.os.Build; + +public class DailyHelperApplikation extends Application { + + public static final String CHANNEL_ID = "location_service_channel"; + @Override + public void onCreate() { + super.onCreate(); + + if (Build.VERSION.SDK_INT > 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/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java new file mode 100644 index 0000000..4bd3c4d --- /dev/null +++ b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/service/LocationService.java @@ -0,0 +1,109 @@ +package at.fhj.swd.dailyhelper.service; + +import android.Manifest; +import android.app.Notification; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.os.IBinder; +import android.preference.PreferenceManager; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.NotificationCompat; +import android.util.Log; + +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationCallback; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationResult; +import com.google.android.gms.location.LocationServices; + +import at.fhj.swd.dailyhelper.R; +import at.fhj.swd.dailyhelper.ui.activity.MainActivity; + +import static at.fhj.swd.dailyhelper.DailyHelperApplikation.CHANNEL_ID; + +public class LocationService extends Service { + + private static final String TAG = "LocationService"; + + private Notification notification; + + private FusedLocationProviderClient fusedLocationProviderClient; + private LocationCallback locationCallback; + + @Override + public void onCreate() { + super.onCreate(); + setupNotification(); + Log.d(TAG, "service created"); + fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this); + locationCallback = new LocationCallback() { + @Override + public void onLocationResult(LocationResult locationResult) { + if(locationResult.getLocations().size() != 0){ + + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(LocationService.this); + preferences.edit() + .putFloat("latitude", (float) locationResult.getLocations().get(0).getLatitude()) + .putFloat("longitude", (float) locationResult.getLocations().get(0).getLongitude()) + .putFloat("altitude", (float) locationResult.getLocations().get(0).getAltitude()) + .putFloat("accuracy", (float) locationResult.getLocations().get(0).getAccuracy()) + .putFloat("speed", locationResult.getLocations().get(0).getSpeed()).apply(); + + } + } + }; + + } + + public void startLocationUpdate() { + LocationRequest request = new LocationRequest(); + request.setInterval(5000); + request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); + + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + fusedLocationProviderClient.requestLocationUpdates(request, locationCallback, null); + } + + } + + public void stopLocationUpdate() { + fusedLocationProviderClient.removeLocationUpdates(locationCallback); + } + + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.d(TAG, "service started"); + startForeground(4545, notification); + startLocationUpdate(); + return START_STICKY; + + } + + @Override + public void onDestroy() { + stopLocationUpdate(); + super.onDestroy(); + Log.d(TAG, "service destroyed"); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + private void setupNotification() { + Intent notificationIntent = new Intent(this, MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); + + notification = new NotificationCompat.Builder(this, CHANNEL_ID) + .setContentText("Updating location") + .setContentTitle("DailyHelper Location Service") + .setSmallIcon(R.drawable.ic_star) + .setContentIntent(pendingIntent).build(); + } + +} diff --git a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java index 0449c5d..18de12a 100644 --- a/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java +++ b/DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/ui/activity/MainActivity.java @@ -1,6 +1,11 @@ package at.fhj.swd.dailyhelper.ui.activity; +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; import android.support.v4.view.GravityCompat; import android.support.v7.app.ActionBarDrawerToggle; import android.view.MenuItem; @@ -12,6 +17,7 @@ import android.support.v7.widget.Toolbar; import android.view.Menu; import at.fhj.swd.dailyhelper.R; +import at.fhj.swd.dailyhelper.service.LocationService; import at.fhj.swd.dailyhelper.ui.fragemnt.HomeFragment; import at.fhj.swd.dailyhelper.ui.fragemnt.MapFragment; import at.fhj.swd.dailyhelper.ui.fragemnt.WeatherFragment; @@ -57,6 +63,30 @@ public class MainActivity extends AppCompatActivity } } + private void startLocationService(){ + + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + Intent intent = new Intent(this, LocationService.class); + startService(intent); + } else { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 12435 ); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if(requestCode == 12435){ + if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ + startLocationService(); + } + } + } + + private void stopLocationService(){ + Intent intent = new Intent(this, LocationService.class); + stopService(intent); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. @@ -64,20 +94,6 @@ public class MainActivity extends AppCompatActivity return true; } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - return true; - } - - return super.onOptionsItemSelected(item); - } @Override public boolean onNavigationItemSelected(MenuItem item) { @@ -98,4 +114,27 @@ public class MainActivity extends AppCompatActivity 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; + + case R.id.action_refresh: + // fetchLocations(); + return true; + + + default: + return false; + } + + } + } diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml new file mode 100644 index 0000000..a1e7c4a --- /dev/null +++ b/DailyHelper/app/src/main/res/drawable-v21/ic_location_off.xml @@ -0,0 +1,9 @@ + + + diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml new file mode 100644 index 0000000..07d6e46 --- /dev/null +++ b/DailyHelper/app/src/main/res/drawable-v21/ic_location_on.xml @@ -0,0 +1,9 @@ + + + diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml new file mode 100644 index 0000000..8229a9a --- /dev/null +++ b/DailyHelper/app/src/main/res/drawable-v21/ic_refresh_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/DailyHelper/app/src/main/res/drawable-v21/ic_star.xml b/DailyHelper/app/src/main/res/drawable-v21/ic_star.xml new file mode 100644 index 0000000..2f9cd1e --- /dev/null +++ b/DailyHelper/app/src/main/res/drawable-v21/ic_star.xml @@ -0,0 +1,9 @@ + + + diff --git a/DailyHelper/app/src/main/res/drawable/border.xml b/DailyHelper/app/src/main/res/drawable/border.xml new file mode 100644 index 0000000..6ac7039 --- /dev/null +++ b/DailyHelper/app/src/main/res/drawable/border.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/DailyHelper/app/src/main/res/layout/fragment_home.xml b/DailyHelper/app/src/main/res/layout/fragment_home.xml index f58e512..433925b 100644 --- a/DailyHelper/app/src/main/res/layout/fragment_home.xml +++ b/DailyHelper/app/src/main/res/layout/fragment_home.xml @@ -2,12 +2,87 @@ - + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_margin="20dp" + android:padding="20dp" + android:background="@drawable/border"> + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DailyHelper/app/src/main/res/menu/main.xml b/DailyHelper/app/src/main/res/menu/main.xml index a2411e3..b61087a 100644 --- a/DailyHelper/app/src/main/res/menu/main.xml +++ b/DailyHelper/app/src/main/res/menu/main.xml @@ -1,9 +1,9 @@ - + + + + + diff --git a/DailyHelper/app/src/main/res/values/strings.xml b/DailyHelper/app/src/main/res/values/strings.xml index a9d06e6..3e41329 100644 --- a/DailyHelper/app/src/main/res/values/strings.xml +++ b/DailyHelper/app/src/main/res/values/strings.xml @@ -12,4 +12,7 @@ Karte Wasserwaage + + AIzaSyBQhcmDlyP01yNwTd4RTlatQIAJH3wJHw0 +