diff options
| author | bt <bt@rctt.net> | 2026-06-05 17:50:26 +0200 |
|---|---|---|
| committer | bt <bt@rctt.net> | 2026-06-05 17:50:26 +0200 |
| commit | 9bd4e41d3dc074f76ded28a119f85d1bcee78e3c (patch) | |
| tree | 4589ee5d712cc7a7b2d968e227ab902597bbc7b1 /app/src | |
| parent | cea9b1101a7197be413060a1b4cdd34a81b67d2f (diff) | |
| download | netmon-9bd4e41d3dc074f76ded28a119f85d1bcee78e3c.tar.gz netmon-9bd4e41d3dc074f76ded28a119f85d1bcee78e3c.zip | |
Add scanner service
Diffstat (limited to 'app/src')
| -rw-r--r-- | app/src/main/AndroidManifest.xml | 8 | ||||
| -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 | ||||
| -rw-r--r-- | app/src/main/res/layout/activity_main.xml | 6 | ||||
| -rw-r--r-- | app/src/main/res/layout/fragment_main.xml | 14 | ||||
| -rw-r--r-- | app/src/main/res/layout/fragment_scan.xml | 28 | ||||
| -rw-r--r-- | app/src/main/res/menu/nav_menu.xml | 2 |
8 files changed, 148 insertions, 26 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 05bd126..6541e4c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,23 +9,27 @@ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application - android:requestLegacyExternalStorage="true" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Base.Theme.Netmon"> + <service + android:name=".ScannerService" + android:exported="false" /> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 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) + } + }) + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c78970c..221d2e9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,6 +2,7 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/test" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" @@ -11,10 +12,7 @@ android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_above="@+id/bottomNav" > - - </FrameLayout> - + android:layout_above="@+id/bottomNav" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNav" diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml deleted file mode 100644 index 366cbbe..0000000 --- a/app/src/main/res/layout/fragment_main.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".MainFragment"> - - <!-- TODO: Update blank fragment layout --> - <TextView - android:layout_width="match_parent" - android:layout_height="match_parent" - android:text="@string/hello_blank_fragment" /> - -</FrameLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/fragment_scan.xml b/app/src/main/res/layout/fragment_scan.xml new file mode 100644 index 0000000..ee91e17 --- /dev/null +++ b/app/src/main/res/layout/fragment_scan.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".MainFragment"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <Button + android:id="@+id/button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:onClick="startGetCellService" + android:text="Start" /> + + <Button + android:id="@+id/button2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:onClick="stopGetCellService" + android:text="Stop" /> + </LinearLayout> + +</FrameLayout>
\ No newline at end of file diff --git a/app/src/main/res/menu/nav_menu.xml b/app/src/main/res/menu/nav_menu.xml index 5c42815..a4332ae 100644 --- a/app/src/main/res/menu/nav_menu.xml +++ b/app/src/main/res/menu/nav_menu.xml @@ -3,7 +3,7 @@ <item android:id="@+id/main" android:icon="@drawable/rounded_bar_chart_24" - android:title="Main" /> + android:title="Scan" /> <item android:id="@+id/log" android:icon="@drawable/outline_database_24" |
