Я пишу приложение на Kotlin для тестирования мобильных сетей.
Приложение должно иметь возможность регистрировать полученные звонки и SMS.
Я определил широковещательный приемник в MainActivity, и, похоже, оно работает с звонки, а не смс.
Кроме того, в onReceive пытаюсь узнать местоположение мобильного телефона, но не получается.
Чего не хватает?
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var managePermissions: ManagePermissions
private lateinit var smsCallReceiver: BroadcastReceiver
@SuppressLint("MissingPermission")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val svm = ViewModelProvider(this)[SharedViewModel::class.java] //
// ---------- ASK FOR PERMISSIONS NEEDED BY THE APP
val list = listOf(
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.INTERNET,
android.Manifest.permission.SEND_SMS,
android.Manifest.permission.RECEIVE_SMS,
android.Manifest.permission.BROADCAST_SMS,
android.Manifest.permission.READ_PHONE_STATE,
android.Manifest.permission.READ_BASIC_PHONE_STATE,
android.Manifest.permission.CALL_PHONE ,
android.Manifest.permission.READ_CALL_LOG
)
managePermissions = ManagePermissions(this,list,1)
managePermissions.checkPermissions()
// ------------ START LISTENING FOR SMS AND CALL RECEIVED
smsCallReceiver = SMSCallReceiver(this,svm)
var intentFilter = IntentFilter("android.provider.Telephony.SMS_RECEIVED")
intentFilter.addAction("android.intent.action.PHONE_STATE")
intentFilter.addCategory("android.intent.category.DEFAULT")
ContextCompat.registerReceiver(this, smsCallReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
// ------------- BINDING AND NAVIGATION BAR
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_main)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
// ---------- SETUP NAVIGATION CONTROLLER
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(smsCallReceiver)
}
}
Класс широковещательного приемника
class SMSCallReceiver(private val act: Activity, private val svm:SharedViewModel): BroadcastReceiver() {
private lateinit var context: Context
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
private var lat = ""
private var long = ""
@SuppressLint("MissingPermission")
override fun onReceive(context: Context?, intent: Intent?) {
this.context = context!!
val fileMgmt = FileManagement(context)
val opName = svm.registeredNet
val lm = act.getSystemService(Activity.LOCATION_SERVICE) as LocationManager
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(act)
val task = fusedLocationProviderClient.lastLocation
task.addOnSuccessListener {
if (it != null){
lat = "${it.latitude}" // it.longitude is a Double
long = "${it.longitude}" // tvLongitude is a TextView
}
}
if (intent?.action.equals("android.intent.action.PHONE_STATE")) {
val state = intent?.getStringExtra(TelephonyManager.EXTRA_STATE)
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
val phoneNumber = intent?.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)
Log.i(TAG, "Incoming call from: $phoneNumber")
if (phoneNumber!=null)
fileMgmt.writeLogFile(
LocalDateTime.now().toString()+", $opName, Call Received from $phoneNumber, $lat, $long")
} else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Log.i(TAG, "Call ended")
}
} else if (intent?.action.equals("android.provider.Telephony.SMS_RECEIVED")) {
val smsMessages =
Telephony.Sms.Intents.getMessagesFromIntent(intent)
val phoneNumber = smsMessages[0].displayOriginatingAddress
fileMgmt.writeLogFile(
LocalDateTime.now().toString()+", $opName, SMS Received from $phoneNumber, $lat, $long")
}
}
}
Манифест
Подробнее здесь: https://stackoverflow.com/questions/785 ... -isnt-able
Приемник широковещательной рассылки работает со звонками, но не с SMS. Для обоих он не может определить местоположение ⇐ Android
Форум для тех, кто программирует под Android
1716217505
Anonymous
Я пишу приложение на Kotlin для тестирования мобильных сетей.
Приложение должно иметь возможность регистрировать полученные звонки и SMS.
Я определил широковещательный приемник в MainActivity, и, похоже, оно работает с звонки, а не смс.
Кроме того, в onReceive пытаюсь узнать местоположение мобильного телефона, но не получается.
Чего не хватает?
[b]MainActivity[/b]
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var managePermissions: ManagePermissions
private lateinit var smsCallReceiver: BroadcastReceiver
@SuppressLint("MissingPermission")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val svm = ViewModelProvider(this)[SharedViewModel::class.java] //
// ---------- ASK FOR PERMISSIONS NEEDED BY THE APP
val list = listOf(
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.INTERNET,
android.Manifest.permission.SEND_SMS,
android.Manifest.permission.RECEIVE_SMS,
android.Manifest.permission.BROADCAST_SMS,
android.Manifest.permission.READ_PHONE_STATE,
android.Manifest.permission.READ_BASIC_PHONE_STATE,
android.Manifest.permission.CALL_PHONE ,
android.Manifest.permission.READ_CALL_LOG
)
managePermissions = ManagePermissions(this,list,1)
managePermissions.checkPermissions()
// ------------ START LISTENING FOR SMS AND CALL RECEIVED
smsCallReceiver = SMSCallReceiver(this,svm)
var intentFilter = IntentFilter("android.provider.Telephony.SMS_RECEIVED")
intentFilter.addAction("android.intent.action.PHONE_STATE")
intentFilter.addCategory("android.intent.category.DEFAULT")
ContextCompat.registerReceiver(this, smsCallReceiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
// ------------- BINDING AND NAVIGATION BAR
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_main)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
// ---------- SETUP NAVIGATION CONTROLLER
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(smsCallReceiver)
}
}
[b]Класс широковещательного приемника[/b]
class SMSCallReceiver(private val act: Activity, private val svm:SharedViewModel): BroadcastReceiver() {
private lateinit var context: Context
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
private var lat = ""
private var long = ""
@SuppressLint("MissingPermission")
override fun onReceive(context: Context?, intent: Intent?) {
this.context = context!!
val fileMgmt = FileManagement(context)
val opName = svm.registeredNet
val lm = act.getSystemService(Activity.LOCATION_SERVICE) as LocationManager
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(act)
val task = fusedLocationProviderClient.lastLocation
task.addOnSuccessListener {
if (it != null){
lat = "${it.latitude}" // it.longitude is a Double
long = "${it.longitude}" // tvLongitude is a TextView
}
}
if (intent?.action.equals("android.intent.action.PHONE_STATE")) {
val state = intent?.getStringExtra(TelephonyManager.EXTRA_STATE)
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
val phoneNumber = intent?.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)
Log.i(TAG, "Incoming call from: $phoneNumber")
if (phoneNumber!=null)
fileMgmt.writeLogFile(
LocalDateTime.now().toString()+", $opName, Call Received from $phoneNumber, $lat, $long")
} else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
Log.i(TAG, "Call ended")
}
} else if (intent?.action.equals("android.provider.Telephony.SMS_RECEIVED")) {
val smsMessages =
Telephony.Sms.Intents.getMessagesFromIntent(intent)
val phoneNumber = smsMessages[0].displayOriginatingAddress
fileMgmt.writeLogFile(
LocalDateTime.now().toString()+", $opName, SMS Received from $phoneNumber, $lat, $long")
}
}
}
[b]Манифест[/b]
Подробнее здесь: [url]https://stackoverflow.com/questions/78507358/broadcast-receiver-works-with-calls-but-doesnt-with-sms-for-both-it-isnt-able[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия