HelloCW
HelloCW

Reputation: 2325

Why do I get "requesting permission to use WLAN. Allow?" prompt window in real mobile phone?

I use the Code A to set the enabled status of WiFi, it works well when I use Android Emulator with both API 26 and API 23 in Android Studio 3.1.3 , and none of prompt window display!

But I get a prompt window "An App is requesting permission to use WLAN. Allow?" in real mobile phone with Android 5.1 when I run the code A.

How can I make the prompt window not to display in real mobile phone? Thanks!

BTW,the real mobile phone is Samsung SM-J5008 with Android 5.1

Prompt Window

enter image description here

I have set the permissions

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

Code A

fun setWiFi(aWiFiDef: WiFiDef): Unit{
    val wifiManager =mContext.applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
    wifiManager.isWifiEnabled=aWiFiDef.status        
}

Upvotes: 6

Views: 880

Answers (2)

Denis Loh
Denis Loh

Reputation: 2224

Android 5.1 does not have such runtime permission, so I assume, that this is a wrongly implemented permission request rational, which is shown even though the app does not need to. You wrote, that you tested with API level 26 and 23, which is Android 6.0 and higher, so these versions already have runtime permissions. Maybe you haven't seen this issue, because you haven't tested on devices below Android 6.0...

Please check if you somewhere call AppCompat.shouldShowRequestPermissionRationale() and if it is surrounded by SDK level checks or at least with a checkSelfPermission as described here: https://developer.android.com/training/permissions/requesting. Test your code in an emulator with Android 5.1 and Android 6.0. Then you should be able to reproduce that issue also on real phones.

Upvotes: 2

cjnash
cjnash

Reputation: 1248

You also need to add this to your manifest:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

According to the website below: *App on Marshmallow needs ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission and Location services should be enabled to get wifi scan results. Google probably sees scanning for wifi as a security concern, and wanted to add the location permissions as well.

I would recommend following the blog post below if you are having trouble after adding the ACCESS_COARSE_LOCATION permission to your manifest.

https://www.intentfilter.com/2016/08/programatically-connecting-to-wifi.html

EDIT

For the people down voting, please include a comment explaining why. Was my answer flat out wrong? Did I overlook somthing?

Some more information on google's geolocation service:

  • Google maintains a huge database for its geolocation service ("Access coarse location" permission). It consists of:
    • Wifi access point mappings: Wifi MAC address resolve to a geolocation
    • Cell tower mapping: Cell tower ID's resolve to a geolocation

So it is very possible that this user didn't include this permission and is getting this dialog box.

Upvotes: 0

Related Questions