diff options
Diffstat (limited to 'app/src/main/java/net')
| -rw-r--r-- | app/src/main/java/net/rctt/netmon/MainActivity.kt | 59 | ||||
| -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.kt | 55 |
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) + } + }) + } +} |
