cs5530 mobile/wireless systems android...

Post on 05-Jun-2020

19 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ref.CN5E,NT@UW,WUSTLCS5530

CS5530Mobile/WirelessSystemsAndroidWiFi Interface

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

UC.ColoradoSprings

Midterm

Ref.CN5E,NT@UW,WUSTL2CS5530

• Easy?Difficult?• Time?

o Finalis2hoursinclass

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>;

}

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL4CS5530

• GettingWiFi connectioninformationonAndroid1. RequestuserpermissioninAndroidManifest.xml

2. CreateaWiFi manager(classWiFiManager)

3. GetWiFi informationfromthemanager(classWiFiInfo)

4. AcquiredatafromWiFiInfo class

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

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);

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

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)

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)

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)

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL11CS5530

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

o ClickOk,thenprojectwillberebuilt

AndroidWiFi Interface

Ref.CN5E,NT@UW,WUSTL12CS5530

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

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;}

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

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

AndroidLogmethod

Ref.CN5E,NT@UW,WUSTL16CS5530

• Sometimeslogcathasnooutputo Knownproblem

o RestartAndroidstudio…

• adblogcat

catannounce.txt_

Ref.CN5E,NT@UW,WUSTL17CS5530

• Projects??!!• Lastclass:projectdemo

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);

AndroidBroadcasts(1)

Ref.CN5E,NT@UW,WUSTL19CS5530

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

o Apps canalsosendcustombroadcasts,e.g.,tonotifyotherappsthatsomenewdatahasbeendownloaded

AndroidBroadcasts(2)

Ref.CN5E,NT@UW,WUSTL20CS5530

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

o Appscanregistertoreceivespecificbroadcasts

o Systembroadcastsaresenttoallappssubscribed toreceivetheevent

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

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);

ReceivingBroadcasts(2)

Ref.CN5E,NT@UW,WUSTL23CS5530

• Createaninstanceof BroadcastReceivero BroadcastReceiver wifiReceiver =newBroadcastReceiver(){

@OverridepublicvoidonReceive(Contextcontext,Intentintent){

//definewhattodowhenreceivethebroadcast}

};

• Stopreceivingbroadcastso unregisterReceiver()

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…...

}

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);

}}

};

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"/>

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

PermissionsonAndroid(1)

Ref.CN5E,NT@UW,WUSTL28CS5530

• AfterAndroid6.0,permissionsaredividedintotwocategorieso Normalpermissions

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

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 …..

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

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 ….

PermissionsonAndroid(4)

Ref.CN5E,NT@UW,WUSTL32CS5530

• Viewinganapp'spermissionso Settings > Apps.Pickanappandscrolldowntoseethepermissionsthat

theappuses

o adb shellpmlistpermissions-s(allpermissions)

o adb shellpmlistpermissions-d-g(listpermissionsbygroup)

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

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);

}

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);}

top related