Network Explorer WiFi network WiFi device and Bluetooth
Network Explorer Wi-Fi network, Wi-Fi device and Bluetooth device discovery app Bill Wixted
Overview • • Navigation Drawer Wizard App. Compat. Activity & Fragments Action Bar Wifi Network Discovery Bluetooth Device Discovery Wifi Device Discovery 3 rd party: ACRA, Google Analytics
New Project Wizard
Navigation Drawer Fragment • Main. Activity extends App. Compat. Activity • Placeholder. Fragment • Navigation. Drawer. Fragment. java Array. List<Nav. Drawer. Item> items = new Array. List<>(); items. add(0, new items. add(1, new items. add(2, new items. add(3, new items. add(4, new items. add(5, new Nav. Drawer. Item(“Wi-Fi Networks”, "1", R. drawable. ic_wifi)); Nav. Drawer. Item(“Wi-Fi Devices”, “ 2", R. drawable. ic_laptop)); Nav. Drawer. Item(“Bluetooth Devices”, “ 3", R. drawable. ic_blue)); Nav. Drawer. Item(“About”, “ 4", R. drawable. ic_info)); Nav. Drawer. Item(“Terms”, “ 5", R. drawable. ic_document)); Nav. Drawer. Item(“Help”), “ 6", R. drawable. ic_help)); Base. Adapter adapter = new Nav. Drawer. List. Adapter(get. Action. Bar(). get. Themed. Context(), nav. Drawer. Items); m. Drawer. List. View. set. Adapter(adapter);
App. Compat. Activity • • • Added in v 7 support library replaced Action. Bar. Activity Material design features Consistent look and feel across Android versions Action bar, Toolbar support Fragment support via parent class Fragment. Activity <style name="App. Theme" parent="Theme. App. Compat. Light. Dark. Action. Bar"> public class Main. Activity extends App. Compat. Activity dependencies { compile 'com. android. support: appcompat-v 7: 23. 0. 1'
Action Bar • If using App. Compat you must use get. Support. Action. Bar • Define “home. As. Up. Indicator” in styles. xml • Main. Activity: : on. Options. Item. Selected handles press events public boolean on. Create. Options. Menu(Menu menu) { get. Menu. Inflater(). inflate(R. menu. main, menu) Action. Bar action. Bar = get. Support. Action. Bar(); action. Bar. set. Home. Button. Enabled(true); action. Bar. set. Display. Show. Home. Enabled(true);
Fragments • Each Fragment extends v 4. app. Fragment • Use get. Support. Fragment. Manager public void on. Navigation. Drawer. Item. Selected(int position) { fragment. ID = position; Fragment. Manager fragment. Manager = get. Support. Fragment. Manager(); if (position == WIFI_NETWORKS) { fragment. Manager. begin. Transaction(). replace(R. id. container, Wifi. Networks. Fragment. new. Instance(position + 1), WIFI_NETWORKS_TAG). add. To. Back. Stack(null). commit(); }
Wi-Fi Network Discovery • Wifi. Manager • Broadcast. Receiver
Bluetooth Device Discovery • Bluetooth. Adapter • Broadcast. Receiver
Wi-Fi Device Discovery � Wifi. Devices. Scanner � Device. Discoverer
Address Resolution Protocol (ARP) • Telecommunication protocol used for resolution of network layer addresses into link layer addresses • In other words, it resolves network address (IP) to a physical address (MAC) • Broadcast: “who is X. X tell Y. Y” • Target sends "X. X is hh: hh: hh: hh“ to “Y. Y”
MAC Address • MAC, Media Access Control, address is a globally unique identifier assigned to network devices, • MAC addresses are 6 -byte (48 -bits) in length, and are written in MM: MM: SS: SS format. • OUI (organizationally unique identifier) assigned by IEEE CC: 3 A: 61: E 7: 11: FE OUI NIC-specific
ARP Cache
Device Manufacturer Lookup • OUIs are assigned by IEEE – http: //standards-oui. ieee. org/oui. txt • Conversion to asset (devices. txt) • Load into map for lookup (Device. Manager)
Subnet Scanning IP: 192. 168. 1. 10 Net. Mask: 16777215 (0 x. FFFFFF) CIDR: 24 (this is “Class C” -> 254 hosts) Start IP: 192. 168. 1. 10 Network Host
Subnet Scanning • Inet. Address. Is. Reachable • uses ICMP (Internet Control Message Protocol) • Tools like ping and traceroute use it
ACRA • Crash reporting tool import org. acra. ACRA; import org. acra. annotation. Reports. Crashes; @Reports. Crashes(form. Uri = "http: //effinitytech. com/update. php") public class Main. App extends Application { @Override public void on. Create() { super. on. Create(); ACRA. init(this); }
ACRA � ACRA module containing acra-4. 7. 0. aar � PHP to catch crash reports $file. Name = 'temp/crash'. date('Y-m-d_H-i-s'). '. txt'; $file = fopen($file. Name, 'w'); foreach($_POST as $key => $value) { $report. Line = $key. " = ". $value. "n"; fwrite($file, $report. Line); } fclose($file);
ACRA • Crash report 3 -10 16: 58: 46. 307 D/Android. Runtime( 5090): Shutting down VM 03 -10 16: 58: 46. 307 E/Network. Explorer( 5090): java. lang. Runtime. Exception: Unable to start activity Component. Info{com. effinitytech. networkexplorer/com. effinitytech. networkexplore r. Wifi. Network. Activity}: java. lang. Number. Format. Exception: Invalid int: "NETGEAR" 03 -10 16: 58: 46. 307 E/Network. Explorer( 5090): at android. app. Activity. Thread. perform. Launch. Activity(Activity. Thread. java: 2693) 03 -10 16: 58: 46. 307 E/Network. Explorer( 5090): at android. app. Activity. Thread. handle. Launch. Activity(Activity. Thread. java: 2758) 03 -10 16: 58: 46. 307 E/Network. Explorer( 5090): at android. app. Activity. Thread. access$900(Activity. Thread. java: 177) 03 -10 16: 58: 46. 307 E/Network. Explorer( 5090): at android. app. Activity. Thread$H. handle. Message(Activity. Thread. java: 1448) 03 -10 16: 58: 46. 307
Google Analytics import com. google. android. gms. analytics. Google. Analytics; import com. google. android. gms. analytics. Tracker; public class Main. App extends Application { private Tracker m. Tracker; private void ERROR(String msg, Exception e) { NLogger. ERROR(msg, e); } @Override public void on. Create() { super. on. Create(); } synchronized public Tracker get. Default. Tracker() { if (m. Tracker == null) { Google. Analytics analytics = Google. Analytics. get. Instance(this); m. Tracker = analytics. new. Tracker(R. xml. global_tracker); } return m. Tracker; } }
Google Analytics Build. gradle: dependencies { compile file. Tree(dir: 'libs', include: ['*. jar']) compile 'com. android. support: appcompat-v 7: 23. 0. 1' compile project(': acra-4. 7. 0') compile 'com. google. android. gms: play-services-analytics: 8. 4. 0' } apply plugin: 'com. google. gms. google-services‘ Android. Manifest. xml: <uses-permission android: name="android. permission. WAKE_LOCK" tools: node="remove" />
Google Analytics • Main. Activity: : on. Attach. Fragment
Google Analytics
Bugs and TBD • Enabling minify causes crash • How to speed up Wifi Devices • Get hostname for Wifi Devices
- Slides: 26