cs5530 mobile/wireless systems android...

35
Ref. CN5E, NT@UW, WUSTL CS5530 CS5530 Mobile/Wireless Systems Android WiFi Interface Yanyan Zhuang Department of Computer Science http://www.cs.uccs.edu/~yzhuang UC. Colorado Springs

Upload: others

Post on 05-Jun-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

Ref.CN5E,NT@UW,WUSTLCS5530

CS5530Mobile/WirelessSystemsAndroidWiFi Interface

YanyanZhuangDepartmentofComputerSciencehttp://www.cs.uccs.edu/~yzhuang

UC.ColoradoSprings

Page 2: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

Midterm

Ref.CN5E,NT@UW,WUSTL2CS5530

• Easy?Difficult?• Time?

o Finalis2hoursinclass

Page 3: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL3CS5530

• OniOSo Nopermissionneeded

o interfaceInfo =CNCopyCurrentNetworkInfo(interfaces){

BSSID="6c:f3:7f:ea:44:f1";

SSID="UCCS-Wireless";

SSIDDATA=<554343532d576972656c657373>;

}

Page 4: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL4CS5530

• GettingWiFi connectioninformationonAndroid1. RequestuserpermissioninAndroidManifest.xml

2. CreateaWiFi manager(classWiFiManager)

3. GetWiFi informationfromthemanager(classWiFiInfo)

4. AcquiredatafromWiFiInfo class

Page 5: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL5CS5530

• WiFi accesspermissiono AndroidManifest.xml

o Add} AccessingWiFi:<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

} ChangingWiFi:<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>

o Accessrequestshowsupwhenuserdownload&install fromGooglePlayStore

Page 6: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL6CS5530

• CreateaWiFi managero https://developer.android.com/reference/android/net/wifi/WifiManager.html

o ProvidestheprimaryAPIformanagingallaspectsofWi-Ficonnectivity

o Syntax} Context.getSystemService(Context.WIFI_SERVICE)

o Example} WifiManager wifiManager =(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);

Page 7: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL7CS5530

• GetWiFi informationo https://developer.android.com/reference/android/net/wifi/WifiInfo.html

o WifiInfo wifiInfo =wifiManager.getConnectionInfo();

o Alotofinformationaccessible

Page 8: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL8CS5530

• GetdatafromWiFiInfo classo wifiInfo.getBSSID()

} 6c:f3:7f:ea:44:f1router’s MACaddress

o wifiInfo.getMacAddress()} f8:a9:d0:81:70:48 phone’sMACaddress

o wifiInfo.getSSID()} "UCCS-Wireless"

o wifiInfo.getIpAddress()} 1098172032phone’sIPaddress(int)

Page 9: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL9CS5530

• GetdatafromWiFiInfo classo wifiInfo.getLinkSpeed()

} 150(Mbps),indicatedbyconstantwifiInfo.LINK_SPEED_UNITS (string)

o wifiInfo.getRssi()} -64 (dBm)

o wifiInfo.getSupplicantState()} COMPLETED/ASSOCIATED/ASSOCIATING/AUTHENTICATING/DISCONNECTED/SCANNING/INACTIVE

o wifiInfo.getFrequency()} AvailableatAPIlevel21andabove(5.0Lollipop)

} 5220(MHz)indicatedbyconstantwifiInfo.FREQUENCY_UNITS (string)

Page 10: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL10CS5530

• GetdatafromWiFiInfo classo wifiInfo.getLinkSpeed()

} 150(Mbps),indicatedbyconstantwifiInfo.LINK_SPEED_UNITS (string)

o wifiInfo.getRssi()} -64 (dBm)

o wifiInfo.getSupplicantState()} COMPLETED

o wifiInfo.getFrequency()} AvailableatAPIlevel21andabove

} Unit:MHz,indicatedbyconstantwifiInfo.FREQUENCY_UNITS (string)

Page 11: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL11CS5530

• HowtochangeminAPIlevelo Rightclickappdirecotoryà “OpenModuleSettings”àSelectappà “Flavors”tablàMinSDKversion

o ClickOk,thenprojectwillberebuilt

Page 12: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL12CS5530

• HowtoconvertintegerIPtostring(oldmethod)o int ip =wifiInfo.getIpAddress();StringipAddress =Formatter.formatIpAddress(ip);Log.v(TAG,ipAddress);

Page 13: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL13CS5530

• HowtoconvertintegerIPtostring(newmethod)o http://stackoverflow.com/questions/16730711/get-my-wifi-ip-address-

android/21181887if(ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN))

ipAddress =Integer.reverseBytes(ipAddress);

byte[]ipByteArray =BigInteger.valueOf(ip).toByteArray();StringipAddressString;

try{ipAddressString =InetAddress.getByAddress(ipByteArray).getHostAddress();}catch(UnknownHostException ex){Log.e("WIFIIP","Unabletogethostaddress.");ipAddressString =null;}

Page 14: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidLogmethod

Ref.CN5E,NT@UW,WUSTL14CS5530

• Printmessagestologcato https://developer.android.com/reference/android/util/Log.html

o Log.d()} DEBUGmessage

o Log.e()} ERRORmessage

o Log.i()} INFOmessage

Page 15: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidLogmethod

Ref.CN5E,NT@UW,WUSTL15CS5530

• Printmessagestologcato Log.v()

} VERBOSEmessage

o Log.w()} WARNmessage

o Log.wtf()} WhataTerribleFailure:Reportaconditionthatshouldneverhappen

o Arguments:} Log.v(String tag, String msg)

} Tagforidentifyingthismessage

Page 16: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidLogmethod

Ref.CN5E,NT@UW,WUSTL16CS5530

• Sometimeslogcathasnooutputo Knownproblem

o RestartAndroidstudio…

• adblogcat

Page 17: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

catannounce.txt_

Ref.CN5E,NT@UW,WUSTL17CS5530

• Projects??!!• Lastclass:projectdemo

Page 18: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidGetWiFi Connection

Ref.CN5E,NT@UW,WUSTL18CS5530

• WifiInfo wifiInfo =wifiManager.getConnectionInfo();

Log.v(TAG,wifiInfo.getBSSID());Log.v(TAG,wifiInfo.getMacAddress());Log.v(TAG,wifiInfo.getSSID());

int ip =wifiInfo.getIpAddress();StringipAddress =Formatter.formatIpAddress(ip);Log.v(TAG,ipAddress);

Log.v(TAG,Integer.toString(wifiInfo.getLinkSpeed())+wifiInfo.LINK_SPEED_UNITS);Log.v(TAG,Integer.toString(wifiInfo.getRssi())+"dBm");Log.v(TAG,wifiInfo.getSupplicantState().toString());

Log.v(TAG,Integer.toString(wifiInfo.getFrequency())+wifiInfo.FREQUENCY_UNITS);

Page 19: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidBroadcasts(1)

Ref.CN5E,NT@UW,WUSTL19CS5530

• Androidappscansend/receivebroadcastmessagesfromtheAndroidsystemandotherAndroidapps• Broadcastsaresentwhenaneventofinterestoccurso Androidsystemsendsbroadcasts,e.g.,whenthesystembootsuporthedevicestartscharging

o Apps canalsosendcustombroadcasts,e.g.,tonotifyotherappsthatsomenewdatahasbeendownloaded

Page 20: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidBroadcasts(2)

Ref.CN5E,NT@UW,WUSTL20CS5530

• AndroidSystemBroadcastso Systemautomaticallysendsbroadcastswhenvarioussystemeventsoccur,e.g.,whensystemswitchesin/outofairplanemode,WiFi scancomplete

o Appscanregistertoreceivespecificbroadcasts

o Systembroadcastsaresenttoallappssubscribed toreceivetheevent

Page 21: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

AndroidBroadcasts(3)

Ref.CN5E,NT@UW,WUSTL21CS5530

• ToinitializeaWiFi scano wifiManager.startScan();

• Eachbroadcastactionhasaconstantfieldassociatedwithito android.app.action.ACTION_PASSWORD_CHANGEDo …o android.net.wifi.RSSI_CHANGEDo android.net.wifi.SCAN_RESULTSo android.net.wifi.WIFI_STATE_CHANGED

Page 22: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

ReceivingBroadcasts(1)

Ref.CN5E,NT@UW,WUSTL22CS5530

• Createan IntentFiltero IntentFilter wifiFilter =newIntentFilter(wifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

• Registerthereceivero bycalling registerReceiver(BroadcastReceiver,IntentFilter)

} E.g.,IntentwifiIntent =getApplicationContext().registerReceiver(wifiReceiver,wifiFilter);

Page 23: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

ReceivingBroadcasts(2)

Ref.CN5E,NT@UW,WUSTL23CS5530

• Createaninstanceof BroadcastReceivero BroadcastReceiver wifiReceiver =newBroadcastReceiver(){

@OverridepublicvoidonReceive(Contextcontext,Intentintent){

//definewhattodowhenreceivethebroadcast}

};

• Stopreceivingbroadcastso unregisterReceiver()

Page 24: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

ReceivingWiFi ScanResults(1)

Ref.CN5E,NT@UW,WUSTL24CS5530

WifiManager wifiManager;publicstaticBroadcastReceiver wifiReceiver;publicstaticIntentFilter wifiFilter;publicstaticIntentwifiIntent;

wifiManager =(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);

if(wifiManager.getWifiState()==wifiManager.WIFI_STATE_ENABLED){wifiFilter =newIntentFilter(wifiManager.SCAN_RESULTS_AVAILABLE_ACTION);wifiIntent =getApplicationContext().registerReceiver(wifiReceiver,wifiFilter);wifiManager.startScan(); //needspermissionandroid.permission.CHANGE_WIFI_STATE…...

}

Page 25: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

ReceivingWiFi ScanResults(2)

Ref.CN5E,NT@UW,WUSTL25CS5530

wifiReceiver =newBroadcastReceiver(){@OverridepublicvoidonReceive(Contextcontext,Intentintent){context.unregisterReceiver(this);List<ScanResult>results=wifiManager.getScanResults();

for(int i=0;i<results.size();i++){Log.v(TAG,"BSSID:"+results.get(i).BSSID);Log.v(TAG,"SSID:"+results.get(i).SSID);Log.v(TAG,"capabilities:"+results.get(i).capabilities);Log.v(TAG,"frequency:"+results.get(i).frequency);Log.v(TAG,"level:"+results.get(i).level);

}}

};

Page 26: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionstoGetWiFi ScanResults(1)

Ref.CN5E,NT@UW,WUSTL26CS5530

• Android5.1(Lollipop,APIlevel22)orlowero PermissioninAndroidManifest.xml

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

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

Page 27: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionstoGetWiFi ScanResults(2)

Ref.CN5E,NT@UW,WUSTL27CS5530

• AfterAndroid6.0(Marshmallow,APIlevel23)o AndroidManifest.xml permissionand runtimepermissionincode

o AndroidManifest.xml:} <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>or<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

o Why?} KnowingnearbyWiFi hotspots(sameforBluetoothscans)conceptuallyislocation– arelativelocation.Fromtherelativelocationit’sbecomingeasiertogetanabsolutelocation

} https://code.google.com/p/android/issues/detail?id=185370

Page 28: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsonAndroid(1)

Ref.CN5E,NT@UW,WUSTL28CS5530

• AfterAndroid6.0,permissionsaredividedintotwocategorieso Normalpermissions

} Appneedstoaccessdataoutsidetheapp'ssandbox,butthere'sverylittlerisktotheuser'sprivacyortheoperationofotherapps.E.g.,permissiontousenetwork

Page 29: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsonAndroid(2)

Ref.CN5E,NT@UW,WUSTL29CS5530

• Normalpermissionso Ifanappdeclaresinmanifestthatitneedsanormalpermission,system

automaticallygrantspermissionatinstalltime

o Systemdoesnotpromptusertograntnormalpermissions,anduserscannotrevokethesepermissions(onlyuninstall)

o ACCESS_NETWORK_STATE

o ACCESS_WIFI_STATE

o BLUETOOTH

o CHANGE_NETWORK_STATE

o CHANGE_WIFI_STATE

o …..

Page 30: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsonAndroid(1)

Ref.CN5E,NT@UW,WUSTL30CS5530

• AfterAndroid6.0,permissionsaredividedintotwocategorieso Normalpermissions

} Appneedstoaccessdataoutsidetheapp'ssandbox,butthere'sverylittlerisktotheuser'sprivacyortheoperationofotherapps.E.g.,permissiontousenetwork

o Dangerouspermissions} Appwantsdatathatinvolveuser'sprivateinformation,orcouldpotentiallyaffectuser's

storeddataortheoperationofotherapps.E.g.,readuser'scontacts

} Ifmanifestfilelistsadangerouspermission,theuserhastoexplicitlygiveapprovaltoapp

Page 31: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsonAndroid(3)

Ref.CN5E,NT@UW,WUSTL31CS5530

• Dangerouspermissionso Apprequestspermissionsbothinmanifestand fromuseratruntime

(pop-upwindowlikeiOS)

o Usercanrevokepermissionsatanytime(inSettings>Apps),soappneedstocheckforpermissionseverytimeitruns

o READ/WRITE_CALENDAR

o CAMERA

o READ/WRITE_CONTACTS

o GET_ACCOUNTS

o ACCESS_FINE_LOCATION

o ….

Page 32: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsonAndroid(4)

Ref.CN5E,NT@UW,WUSTL32CS5530

• Viewinganapp'spermissionso Settings > Apps.Pickanappandscrolldowntoseethepermissionsthat

theappuses

o adb shellpmlistpermissions-s(allpermissions)

o adb shellpmlistpermissions-d-g(listpermissionsbygroup)

Page 33: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsatRunTime(1)

Ref.CN5E,NT@UW,WUSTL33CS5530

• Checkforpermissionso Ifappneedsadangerouspermission,codemustcheckeverytimeit

performsanoperationthatrequiresthispermission} Userisalwaysfreetorevokethepermission

o //thisActivity isthecurrentactivityint permissionCheck =ContextCompat.checkSelfPermission(thisActivity,

Manifest.permission.WRITE_CALENDAR);} Ifapphaspermission,themethodreturnsPackageManager.PERMISSION_GRANTED

} Ifappdoesnothavepermission,themethodreturnsPERMISSION_DENIED

Page 34: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionsatRunTime(2)

Ref.CN5E,NT@UW,WUSTL34CS5530

• Requestpermissionso Ifappneedsadangerouspermissionthatwaslistedinthemanifest,it

mustaskusertograntthepermissionif(ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_CONTACTS)

!=PackageManager.PERMISSION_GRANTED){

ActivityCompat.requestPermissions(thisActivity,newString[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS);

}

Page 35: CS5530 Mobile/Wireless Systems Android WiFiInterfaceyzhuang/CS5530/spring2017/slides/android-wifi.pdfo Provides the primary API for managing all aspects of Wi-Fi connectivity o Syntax}Context.getSystemService(Context.WIFI_SERVICE)

PermissionstoGetWiFi ScanResults

Ref.CN5E,NT@UW,WUSTL35CS5530

• AndroidManifest.xmlo <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

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

• Codeo String[]PERMS_INITIAL={

Manifest.permission.ACCESS_FINE_LOCATION,};

if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){

ActivityCompat.requestPermissions(this,PERMS_INITIAL,MY_PERMISSIONS_REQUEST);}