![](/img/trans.png)
[英]BroadcastReceiver.onReceive is not called for PHONE_STATE
[英]How is BroadCastReceiver.onReceive called?
當我單擊按鈕然后 wifiManager.startScan() 但是當我單擊多次時,它返回 false (具體:10 次,總是 4 true 和 6 false)。
我想連續掃描,但我現在不知道為什么以及如何解決它。 誰能告訴我它是如何工作的? 我認為它與線程有關,但沒有找到解決方案。
這是我的代碼:
val wifiManager : WifiManager by lazy { this.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager}
val wifiScanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
if (success) {
Log.d("AAA onReceive", success.toString())
scanSuccess(wifiManager)
} else {
Log.d("AAA onReceive", success.toString())
scanFailure(wifiManager)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
requestPermission()
val intentFilter = IntentFilter()
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
registerReceiver(wifiScanReceiver, intentFilter)
btn.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val check = wifiManager.startScan()
}
})
}
private fun requestPermission() {
if(ContextCompat.checkSelfPermission(this.applicationContext,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION)){
}else{
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),100)
}
}
}
private fun scanSuccess(wifiManager: WifiManager) {
val results = wifiManager.scanResults
for (item in results){
if(!map.containsKey(item.SSID)){
map.put(item.SSID,(Model(calculateDistance(item.level.toDouble(),item.frequency.toDouble()),1)))
}else{
map.put(item.SSID,(Model(map.get(item.SSID)?.sum!!+calculateDistance(item.level.toDouble(),item.frequency.toDouble()),
map.get(item.SSID)?.times!!+1)))
}
}
unregisterReceiver(wifiScanReceiver)
}
private fun scanFailure(wifiManager: WifiManager) {
Log.d("AAA scanFailure", "-")
unregisterReceiver(wifiScanReceiver)
}
}
當我單擊按鈕然后 wifiManager.startScan() 但是當我單擊多次時,它返回 false (具體:10 次,總是 4 true 和 6 false)。
我想連續掃描,但我現在不知道為什么以及如何解決它。 誰能告訴我它是如何工作的? 我認為它與線程有關,但沒有找到解決方案。
這是我的代碼:
val wifiManager : WifiManager by lazy { this.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager}
val wifiScanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
if (success) {
Log.d("AAA onReceive", success.toString())
scanSuccess(wifiManager)
} else {
Log.d("AAA onReceive", success.toString())
scanFailure(wifiManager)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
requestPermission()
val intentFilter = IntentFilter()
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
registerReceiver(wifiScanReceiver, intentFilter)
btn.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val check = wifiManager.startScan()
}
})
}
private fun requestPermission() {
if(ContextCompat.checkSelfPermission(this.applicationContext,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION)){
}else{
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),100)
}
}
}
private fun scanSuccess(wifiManager: WifiManager) {
val results = wifiManager.scanResults
for (item in results){
if(!map.containsKey(item.SSID)){
map.put(item.SSID,(Model(calculateDistance(item.level.toDouble(),item.frequency.toDouble()),1)))
}else{
map.put(item.SSID,(Model(map.get(item.SSID)?.sum!!+calculateDistance(item.level.toDouble(),item.frequency.toDouble()),
map.get(item.SSID)?.times!!+1)))
}
}
unregisterReceiver(wifiScanReceiver)
}
private fun scanFailure(wifiManager: WifiManager) {
Log.d("AAA scanFailure", "-")
unregisterReceiver(wifiScanReceiver)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.