Skip to content

Commit ae45028

Browse files
committed
Kotlin service
1 parent 001ec5d commit ae45028

File tree

5 files changed

+157
-173
lines changed

5 files changed

+157
-173
lines changed

AndroidProject/app/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
apply plugin: 'com.android.library'
2+
apply plugin: 'org.jetbrains.kotlin.android'
23

34
android {
45
namespace "com.kdg.toast.plugin"
@@ -17,9 +18,13 @@ android {
1718
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
1819
}
1920
}
21+
kotlinOptions {
22+
jvmTarget = '1.8'
23+
}
2024
}
2125

2226
dependencies {
2327
implementation fileTree(dir: "libs", include: ["*.jar"])
2428
implementation 'androidx.core:core:1.15.0'
29+
implementation 'androidx.core:core-ktx:1.15.0'
2530
}

AndroidProject/app/src/main/java/com/kdg/toast/plugin/Bridge.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public static void StopService() {
102102
myActivity.stopService(serviceIntent);
103103
}
104104

105-
public static int GetCurrentSteps() {
105+
public static int getCurrentSteps() {
106106
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
107107
SharedPreferences.Editor editor = sharedPreferences.edit();
108108
Date currentDate = Calendar.getInstance().getTime();
@@ -116,7 +116,7 @@ public static int GetCurrentSteps() {
116116

117117
public static String SyncData() {
118118
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
119-
int stepsToSend = GetCurrentSteps();
119+
int stepsToSend = getCurrentSteps();
120120
String firstDate = sharedPreferences.getString(INIT_DATE, "");
121121
String lastDate = sharedPreferences.getString(DATE, "");
122122
String data = firstDate + '#' + lastDate + '#' + stepsToSend;

AndroidProject/app/src/main/java/com/kdg/toast/plugin/PedometerService.java

Lines changed: 0 additions & 170 deletions
This file was deleted.
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package com.kdg.toast.plugin
2+
3+
import android.app.NotificationChannel
4+
import android.app.NotificationManager
5+
import android.app.PendingIntent
6+
import android.app.Service
7+
import android.content.Intent
8+
import android.content.SharedPreferences
9+
import android.hardware.Sensor
10+
import android.hardware.SensorEvent
11+
import android.hardware.SensorEventListener
12+
import android.hardware.SensorManager
13+
import android.os.IBinder
14+
import android.preference.PreferenceManager
15+
import android.util.Log
16+
import android.widget.Toast
17+
import androidx.core.app.NotificationCompat
18+
import androidx.core.app.NotificationManagerCompat
19+
import java.util.Calendar
20+
import java.util.Date
21+
22+
class PedometerService : Service(), SensorEventListener {
23+
var sharedPreferences: SharedPreferences? = null
24+
var TAG: String = "PEDOMETER"
25+
var sensorManager: SensorManager? = null
26+
var running: Boolean = false
27+
var currentDate: Date? = null
28+
var initialDate: Date? = null
29+
override fun onBind(intent: Intent): IBinder? {
30+
return null
31+
}
32+
33+
private fun createNotificationChannel() {
34+
val notificationChannel = NotificationChannel(
35+
"PedometerLib",
36+
"Service Channel",
37+
NotificationManager.IMPORTANCE_DEFAULT
38+
)
39+
val notificationManager = NotificationManagerCompat.from(this)
40+
notificationManager.createNotificationChannel(notificationChannel)
41+
}
42+
43+
private fun startNotification() {
44+
val input = "Counting your steps..."
45+
val notificationIntent = Intent(this, Bridge.myActivity.javaClass)
46+
val pendingIntent = PendingIntent.getActivity(
47+
this,
48+
0, notificationIntent, 0
49+
)
50+
val notification = NotificationCompat.Builder(this, "PedometerLib")
51+
.setContentTitle("Background Walking Service")
52+
.setContentText(input)
53+
.setSmallIcon(R.mipmap.ic_launcher)
54+
.setContentIntent(pendingIntent)
55+
.build()
56+
startForeground(112, notification)
57+
}
58+
59+
override fun onCreate() {
60+
Log.i(TAG, "onCreate: CREATED" + Bridge.steps)
61+
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
62+
loadData()
63+
saveSummarySteps(Bridge.summarySteps + Bridge.steps)
64+
}
65+
66+
override fun onTaskRemoved(rootIntent: Intent) {
67+
super.onTaskRemoved(rootIntent)
68+
Log.i(TAG, "onTaskRemoved: REMOVED" + Bridge.steps)
69+
initSensorManager()
70+
}
71+
72+
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
73+
Log.i(TAG, "onStartCommand: STARTED")
74+
createNotificationChannel()
75+
startNotification()
76+
super.onCreate()
77+
Bridge.initialSteps = 0
78+
initSensorManager()
79+
val editor = sharedPreferences!!.edit()
80+
initialDate = Calendar.getInstance().time
81+
editor.putString(Bridge.INIT_DATE, currentDate.toString())
82+
editor.apply()
83+
return START_NOT_STICKY
84+
}
85+
86+
override fun onDestroy() {
87+
super.onDestroy()
88+
Log.i(TAG, "onDestroy: DESTROYED")
89+
disposeSensorManager()
90+
loadData()
91+
saveSummarySteps(Bridge.summarySteps + Bridge.steps)
92+
}
93+
94+
override fun onSensorChanged(sensorEvent: SensorEvent) {
95+
Log.i(TAG, "onSensorChanged!!!!!!: " + sensorEvent.values[0])
96+
if (Bridge.initialSteps == 0) {
97+
Log.i(TAG, "onSensorChanged: AWAKE")
98+
Bridge.initialSteps = sensorEvent.values[0].toInt()
99+
}
100+
if (running) {
101+
Bridge.steps = sensorEvent.values[0].toInt() - Bridge.initialSteps
102+
Log.i(TAG, "onSensorChanged: current steps: " + Bridge.steps)
103+
saveData(Bridge.steps)
104+
}
105+
}
106+
107+
override fun onAccuracyChanged(sensor: Sensor, i: Int) {}
108+
109+
fun initSensorManager() {
110+
sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
111+
running = true
112+
val countSensor = sensorManager!!.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
113+
if (countSensor != null) {
114+
sensorManager!!.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI)
115+
} else {
116+
Toast.makeText(Bridge.myActivity, "Sensor Not Found (", Toast.LENGTH_LONG).show()
117+
}
118+
}
119+
120+
fun disposeSensorManager() {
121+
running = false
122+
sensorManager!!.unregisterListener(this)
123+
}
124+
125+
fun saveData(currentSteps: Int) {
126+
val editor = sharedPreferences!!.edit()
127+
currentDate = Calendar.getInstance().time
128+
editor.putString(Bridge.DATE, currentDate.toString())
129+
Log.i(TAG, "saveData: saved! $currentSteps")
130+
editor.putInt(Bridge.STEPS, currentSteps)
131+
editor.apply()
132+
}
133+
134+
fun saveSummarySteps(stepsToSave: Int) {
135+
val editor = sharedPreferences!!.edit()
136+
currentDate = Calendar.getInstance().time
137+
editor.putString(Bridge.DATE, currentDate.toString())
138+
Log.i(TAG, "saveSummarySteps: saved! $stepsToSave")
139+
editor.putInt("summarySteps", stepsToSave)
140+
editor.apply()
141+
}
142+
143+
fun loadData() {
144+
Bridge.steps = sharedPreferences!!.getInt(Bridge.STEPS, 0)
145+
Bridge.summarySteps = sharedPreferences!!.getInt("summarySteps", 0)
146+
Log.i(TAG, "loadData: steps" + Bridge.steps)
147+
Log.i(TAG, "loadData: summarySteps " + Bridge.summarySteps)
148+
}
149+
}

AndroidProject/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ buildscript {
99
}
1010
dependencies {
1111
classpath 'com.android.tools.build:gradle:8.0.2'
12-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
12+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0"
1313
}
1414
}
1515

0 commit comments

Comments
 (0)