Приемник широковещательной рассылки работает со звонками, но не с SMS. Для обоих он не может определить местоположениеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Приемник широковещательной рассылки работает со звонками, но не с SMS. Для обоих он не может определить местоположение

Сообщение Anonymous »

Я пишу приложение на 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»