Jelajahi Sumber

Background service is up.

Thomas Chef 3 tahun lalu
induk
melakukan
6efbea81d0

+ 0 - 17
.idea/deploymentTargetDropDown.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="deploymentTargetDropDown">
-    <runningDeviceTargetSelectedWithDropDown>
-      <Target>
-        <type value="RUNNING_DEVICE_TARGET" />
-        <deviceKey>
-          <Key>
-            <type value="SERIAL_NUMBER" />
-            <value value="adb-y55x59fuozusvcbu-8Fp8GF._adb-tls-connect._tcp." />
-          </Key>
-        </deviceKey>
-      </Target>
-    </runningDeviceTargetSelectedWithDropDown>
-    <timeTargetWasSelectedWithDropDown value="2022-07-02T09:24:33.875355Z" />
-  </component>
-</project>

+ 1 - 0
app/build.gradle

@@ -39,6 +39,7 @@ dependencies {
     implementation 'androidx.appcompat:appcompat:1.3.0'
     implementation 'com.google.android.material:material:1.4.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+    implementation 'com.google.android.gms:play-services-location:18.0.0'
     testImplementation 'junit:junit:4.13.2'
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

+ 8 - 0
app/src/main/AndroidManifest.xml

@@ -16,6 +16,14 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.JourneyGPSTracker"
         tools:targetApi="31">
+        <service
+            android:name=".TrackingService"
+            android:enabled="true"
+            android:exported="false"
+            android:description="@string/tracking_service_desc"
+            android:foregroundServiceType="location">
+        </service>
+
         <activity
             android:name=".MainScreenActivity"
             android:exported="true">

+ 54 - 7
app/src/main/java/com/flacksta/chef/journeygpstracker/MainScreenActivity.kt

@@ -1,22 +1,30 @@
 package com.flacksta.chef.journeygpstracker
 
 import android.Manifest
+import android.content.Intent
 import android.content.pm.PackageManager
 import android.os.Bundle
+import android.os.Looper
 import android.util.Log
-import android.view.MenuItem
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
 import androidx.fragment.app.Fragment
 import com.flacksta.chef.journeygpstracker.databinding.ActivityMainScreenBinding
-import com.google.android.material.bottomnavigation.BottomNavigationView
+import com.google.android.gms.location.*
 
 class MainScreenActivity : AppCompatActivity() {
 
-    //var mainBinding: ActivityMainBinding
     private lateinit var binding: ActivityMainScreenBinding
-    private val TAG: String = "MainScreenActivity"
+    private lateinit var locationCallback: LocationCallback
+    private lateinit var mLocationRequest: LocationRequest
+    //private var mTrackingService: TrackingService = TrackingService()
+    private var mPermApproved: Boolean = false
+
+    private val mTag: String = "MainScreenActivity"
+
+    private lateinit var mFusedLocationClient: FusedLocationProviderClient
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -46,12 +54,13 @@ class MainScreenActivity : AppCompatActivity() {
         ) { permissions ->
             when {
                 permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
-                    Log.i(TAG,"Fine permission granted")
+                    Log.i(mTag,"Fine permission granted")
+                    mPermApproved = true
                 }
                 permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
-                    Log.i(TAG,"Only Coarse permission granted")
+                    Log.i(mTag,"Only Coarse permission granted")
                 } else -> {
-                Log.i(TAG,"No Permission granted")
+                Log.i(mTag,"No Permission granted")
             }
             }
         }
@@ -64,9 +73,47 @@ class MainScreenActivity : AppCompatActivity() {
                         Manifest.permission.ACCESS_FINE_LOCATION,
                         Manifest.permission.ACCESS_COARSE_LOCATION))
         }
+        else {
+            mPermApproved = true
+        }
+
+        /*mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
 
+        mLocationRequest = LocationRequest()
+        mLocationRequest.interval = 1000
+        mLocationRequest.fastestInterval = 1000
+        mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
+
+        locationCallback = object : LocationCallback() {
+            override fun onLocationResult(locationResult: LocationResult?) {
+                locationResult ?: return
+                for (location in locationResult.locations){
+                    Log.i(TAG,"Got location.")
+                    // Update UI with location data
+                    // ...
+                }
+            }
+        }
 
+        startLocationUpdates()*/
 
+        Intent(this, TrackingService::class.java).also { intent ->
+            startService(intent)
+        }
+
+    }
+
+    private fun startLocationUpdates() {
+
+        if (ActivityCompat.checkSelfPermission(
+                        this,
+                        Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED )
+        {
+            return
+        }
+        mFusedLocationClient.requestLocationUpdates(mLocationRequest,
+            locationCallback,
+            Looper.getMainLooper())
     }
 
     private fun loadFragment(fragment: Fragment) {

+ 32 - 0
app/src/main/java/com/flacksta/chef/journeygpstracker/TrackingService.kt

@@ -0,0 +1,32 @@
+package com.flacksta.chef.journeygpstracker
+
+import android.app.Service
+import android.content.Intent
+import android.os.IBinder
+import android.util.Log
+
+class TrackingService : Service() {
+
+    private val mTag: String = "TrackingService"
+
+    override fun onCreate() {
+        super.onCreate()
+        Log.i(mTag,"onCreate()")
+    }
+
+    override fun onBind(intent: Intent): IBinder? {
+        Log.i(mTag,"onBind()")
+        return null
+    }
+
+    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+        @Suppress("UNUSED_VARIABLE") val retVal: Int = super.onStartCommand(intent, flags, startId)
+        Log.i(mTag,"onStartCommand()")
+        return START_STICKY
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        Log.i(mTag,"onDestroy()")
+    }
+}

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -2,4 +2,6 @@
     <string name="app_name">JourneyGPSTracker</string>
     <!-- TODO: Remove or change this placeholder text -->
     <string name="hello_blank_fragment">Hello blank fragment</string>
+
+    <string name="tracking_service_desc">GPS Journey tracking service.</string>
 </resources>