summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net')
-rw-r--r--app/src/main/java/net/rctt/netmon/MainActivity.kt59
-rw-r--r--app/src/main/java/net/rctt/netmon/ScanFragment.kt (renamed from app/src/main/java/net/rctt/netmon/MainFragment.kt)2
-rw-r--r--app/src/main/java/net/rctt/netmon/ScannerService.kt55
3 files changed, 111 insertions, 5 deletions
diff --git a/app/src/main/java/net/rctt/netmon/MainActivity.kt b/app/src/main/java/net/rctt/netmon/MainActivity.kt
index 5a25086..3974c48 100644
--- a/app/src/main/java/net/rctt/netmon/MainActivity.kt
+++ b/app/src/main/java/net/rctt/netmon/MainActivity.kt
@@ -1,13 +1,23 @@
package net.rctt.netmon
+import android.content.ComponentName
+import android.content.Intent
+import android.content.ServiceConnection
import android.os.Bundle
-import androidx.appcompat.app/**/.AppCompatActivity
+import android.os.IBinder
+import android.telephony.CellInfo
+import android.util.Log
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
+
class MainActivity : AppCompatActivity() {
- lateinit var bottomNav : BottomNavigationView
+ lateinit var bottomNav: BottomNavigationView
+ lateinit var scanerService: ScannerService
+ var scannerServiceBound: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -24,9 +34,50 @@ class MainActivity : AppCompatActivity() {
true
}
}
- private fun loadFragment(fragment: Fragment){
+
+ override fun onStart() {
+ super.onStart()
+ val intentBind = Intent(this, ScannerService::class.java)
+ bindService(intentBind, connection, BIND_AUTO_CREATE)
+ }
+
+ override fun onStop() {
+ super.onStop()
+ unbindService(connection)
+ scannerServiceBound = false
+ }
+
+ private fun loadFragment(fragment: Fragment) {
val transaction = supportFragmentManager.beginTransaction()
- transaction.replace(R.id.container,fragment)
+ transaction.replace(R.id.container, fragment)
transaction.commit()
}
+
+ private val connection = object : ServiceConnection {
+ override fun onServiceConnected(className: ComponentName, service: IBinder) {
+ val binder = service as ScannerService.LocalBinder
+ scanerService = binder.getService()
+ scannerServiceBound = true
+
+ binder.addListener(object : ScannerService.Callback {
+ override fun onCalled(list: List<CellInfo?>) {
+ Log.d("AAAA", list.toString())
+ }
+ })
+ }
+
+ override fun onServiceDisconnected(arg0: ComponentName) {
+ scannerServiceBound = false
+ }
+ }
+
+ fun startGetCellService(v: View) {
+ val service = Intent(baseContext, ScannerService::class.java)
+ scanerService.run = true
+ startService(service)
+ }
+
+ fun stopGetCellService(v: View) {
+ scanerService.run = false
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/net/rctt/netmon/MainFragment.kt b/app/src/main/java/net/rctt/netmon/ScanFragment.kt
index 4a6e01b..4df7199 100644
--- a/app/src/main/java/net/rctt/netmon/MainFragment.kt
+++ b/app/src/main/java/net/rctt/netmon/ScanFragment.kt
@@ -34,7 +34,7 @@ class MainFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_main, container, false)
+ return inflater.inflate(R.layout.fragment_scan, container, false)
}
companion object {
diff --git a/app/src/main/java/net/rctt/netmon/ScannerService.kt b/app/src/main/java/net/rctt/netmon/ScannerService.kt
new file mode 100644
index 0000000..77a43bf
--- /dev/null
+++ b/app/src/main/java/net/rctt/netmon/ScannerService.kt
@@ -0,0 +1,55 @@
+package net.rctt.netmon
+
+import android.Manifest
+import android.app.IntentService
+import android.content.Intent
+import android.os.Binder
+import android.os.Handler
+import android.os.IBinder
+import android.telephony.CellInfo
+import android.telephony.TelephonyManager
+import android.util.Log
+import androidx.annotation.RequiresPermission
+
+class ScannerService : IntentService(ScannerService::class.simpleName) {
+ interface Callback {
+ fun onCalled(list: List<CellInfo?>)
+ }
+
+ inner class LocalBinder : Binder() {
+ var callback: Callback? = null
+ fun getService(): ScannerService = this@ScannerService
+ fun addListener(listener: Callback?) {
+ callback = listener
+ }
+ }
+
+ val binder = LocalBinder()
+ val handler: Handler = Handler()
+ var run: Boolean = true
+
+ override fun onBind(intent: Intent): IBinder {
+ return binder
+ }
+
+ @RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
+ override fun onHandleIntent(p0: Intent?) {
+ val tel = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
+
+ while (run) {
+ handler.post { refresh(tel) }
+ Thread.sleep(1000)
+ }
+ Log.d("GetCellsService", "Stopping scan service")
+ }
+
+ @RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
+ fun refresh(tel: TelephonyManager) {
+ Log.d("GetCellsService", "Refreshing cells list")
+ tel.requestCellInfoUpdate(mainExecutor, object : TelephonyManager.CellInfoCallback() {
+ override fun onCellInfo(cellList: List<CellInfo?>) {
+ binder.callback?.onCalled(cellList)
+ }
+ })
+ }
+}