{"id":2675,"date":"2025-08-05T19:19:55","date_gmt":"2025-08-05T19:19:55","guid":{"rendered":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=2675"},"modified":"2025-08-05T22:15:03","modified_gmt":"2025-08-05T22:15:03","slug":"building-bluetooth-connections-to-google-glass-a-deep-dive-into-the-glassconnection-class","status":"publish","type":"post","link":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=2675","title":{"rendered":"Building Bluetooth Connections to Google Glass: A Deep Dive into the GlassConnection Class"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-opt-id=1773116952  fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"970\" src=\"https:\/\/ml6vmqguit1n.i.optimole.com\/w:1024\/h:970\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/08\/image-7.png\" alt=\"\" class=\"wp-image-2676\" srcset=\"https:\/\/ml6vmqguit1n.i.optimole.com\/w:1024\/h:970\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/08\/image-7.png 1024w, https:\/\/ml6vmqguit1n.i.optimole.com\/w:300\/h:284\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/08\/image-7.png 300w, https:\/\/ml6vmqguit1n.i.optimole.com\/w:768\/h:728\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/08\/image-7.png 768w, https:\/\/ml6vmqguit1n.i.optimole.com\/w:1139\/h:1079\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/08\/image-7.png 1139w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><em>*Published on August 5, 2025*<\/em> by Ben Gilbert (Turns out this may be an Explorer Edition Glass after all, so you see some stuff about multiple Glass models.)<\/p>\n\n\n\n<p><strong>Introduction<\/strong><\/p>\n\n\n\n<p>Google Glass Enterprise Edition represents a fascinating intersection of wearable technology and enterprise applications. One of the most critical components for creating companion applications is establishing a reliable Bluetooth connection between Glass and other devices. Today, we&#8217;ll explore the `GlassConnection` class, a sophisticated implementation that handles the complex task of managing Bluetooth communications with Google Glass devices.<\/p>\n\n\n\n<p><strong>The Architecture Behind GlassConnection<\/strong><\/p>\n\n\n\n<p>The `GlassConnection` class is designed as a robust communication bridge that manages the entire lifecycle of a Bluetooth connection to Google Glass. Let&#8217;s break down its key components:<\/p>\n\n\n\n<p><strong>Core Components<\/strong><\/p>\n\n\n\n<p>&#8220;`java<\/p>\n\n\n\n<p>public class GlassConnection {<\/p>\n\n\n\n<p>&nbsp; &nbsp; public static final boolean DEBUG = false;<\/p>\n\n\n\n<p>&nbsp; &nbsp; private String mConnectionURL;<\/p>\n\n\n\n<p>&nbsp; &nbsp; private BluetoothSocket mSocket;<\/p>\n\n\n\n<p>&nbsp; &nbsp; private OutputStream mOutStream;<\/p>\n\n\n\n<p>&nbsp; &nbsp; private InputStream mInStream;<\/p>\n\n\n\n<p>&nbsp; &nbsp; private List&lt;GlassConnectionListener&gt; mListeners = new ArrayList&lt;&gt;();<\/p>\n\n\n\n<p>&nbsp; &nbsp; private GlassReaderThread mGlassReaderThread;<\/p>\n\n\n\n<p>&nbsp; &nbsp; private final ExecutorService mWriteThread = Executors.newSingleThreadExecutor();<\/p>\n\n\n\n<p>&nbsp; &nbsp; private final Object STREAM_WRITE_LOCK = new Object();<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>The class employs several design patterns that make it both efficient and reliable:<\/p>\n\n\n\n<p>1. <strong>Observer Pattern<\/strong>: The `mListeners` list implements the observer pattern, allowing multiple components to react to connection events.<\/p>\n\n\n\n<p>2. <strong>Thread Safety<\/strong>: The `STREAM_WRITE_LOCK` object ensures thread-safe write operations, while the `ExecutorService` manages asynchronous write operations.<\/p>\n\n\n\n<p>3. <strong>Resource Management<\/strong>: Proper handling of Bluetooth sockets, input\/output streams, and thread lifecycle.<\/p>\n\n\n\n<p><strong>Device Discovery and Pairing<\/strong><\/p>\n\n\n\n<p>The first step in establishing a connection is discovering available Glass devices:<\/p>\n\n\n\n<p>&#8220;`java<\/p>\n\n\n\n<p>public Set&lt;BluetoothDevice&gt; getBondedDevices() {<\/p>\n\n\n\n<p>&nbsp; &nbsp; return BluetoothAdapter.getDefaultAdapter().getBondedDevices();<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>This method leverages Android&#8217;s Bluetooth API to retrieve already-paired devices. In practice, this means your Glass device needs to be paired with the host device before attempting a connection through this class.<\/p>\n\n\n\n<p><strong>The Connection Process<\/strong><\/p>\n\n\n\n<p>The heart of the `GlassConnection` class lies in its `connect` method:<\/p>\n\n\n\n<p>&#8220;`java<\/p>\n\n\n\n<p>public void connect(BluetoothDevice d) throws IOException {<\/p>\n\n\n\n<p>&nbsp; &nbsp; mSocket = d.createRfcommSocketToServiceRecord(CompanionConstants.SECURE_UUID);<\/p>\n\n\n\n<p>&nbsp; &nbsp; mSocket.connect();<\/p>\n\n\n\n<p>&nbsp; &nbsp; mOutStream = mSocket.getOutputStream();<\/p>\n\n\n\n<p>&nbsp; &nbsp; mInStream = mSocket.getInputStream();<\/p>\n\n\n\n<p>&nbsp; &nbsp; mGlassReaderThread = new GlassReaderThread();<\/p>\n\n\n\n<p>&nbsp; &nbsp; mGlassReaderThread.start();<\/p>\n\n\n\n<p>&nbsp; &nbsp; handshake();<\/p>\n\n\n\n<p>&nbsp; &nbsp; synchronized (mListeners) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; for (GlassConnectionListener listener : mListeners) {<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listener.onConnectionOpened();<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp; }<\/p>\n\n\n\n<p>&nbsp; &nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>This method demonstrates several important concepts:<\/p>\n\n\n\n<p><strong>1. RFCOMM Socket Creation<\/strong><\/p>\n\n\n\n<p>The method creates an RFCOMM (Radio Frequency Communication) socket using a predefined UUID. RFCOMM is a simple set of transport protocols that provides a serial port abstraction over Bluetooth.<\/p>\n\n\n\n<p><strong>2. Stream Management<\/strong><\/p>\n\n\n\n<p>Once the socket is connected, the class establishes input and output streams for bidirectional communication. This allows for both sending commands to Glass and receiving responses or status updates.<\/p>\n\n\n\n<p><strong>3. Background Thread for Reading<\/strong><\/p>\n\n\n\n<p>A dedicated `GlassReaderThread` is started to handle incoming data without blocking the main thread. This is crucial for maintaining responsive communication.<\/p>\n\n\n\n<p><strong>### 4. Protocol Handshake<\/strong><\/p>\n\n\n\n<p>The `handshake()` method initiates the Glass-specific communication protocol, establishing the session parameters and authentication.<\/p>\n\n\n\n<p><strong>5. Event Notification<\/strong><\/p>\n\n\n\n<p>Finally, all registered listeners are notified that the connection has been established, allowing the application to respond appropriately.<\/p>\n\n\n\n<p><strong>Thread Safety and Asynchronous Operations<\/strong><\/p>\n\n\n\n<p>One of the most impressive aspects of this implementation is its handling of concurrent operations:<\/p>\n\n\n\n<p>&#8220;`java<\/p>\n\n\n\n<p>private final ExecutorService mWriteThread = Executors.newSingleThreadExecutor();<\/p>\n\n\n\n<p>private final Object STREAM_WRITE_LOCK = new Object();<\/p>\n\n\n\n<p>&#8220;`<\/p>\n\n\n\n<p>The class uses a single-threaded executor for write operations, ensuring that messages are sent in order while preventing race conditions. The `STREAM_WRITE_LOCK` provides additional synchronization for critical sections.<\/p>\n\n\n\n<p><strong>Real-World Applications<\/strong><\/p>\n\n\n\n<p>This `GlassConnection` class enables a wide range of applications:<\/p>\n\n\n\n<p>&#8211; <strong>Enterprise Asset Management<\/strong>: Connecting warehouse scanners to Glass for real-time inventory updates<\/p>\n\n\n\n<p>&#8211; <strong>Medical Applications<\/strong>: Streaming patient data or surgical instructions to Glass displays<\/p>\n\n\n\n<p>&#8211; <strong>Industrial IoT<\/strong>: Connecting Glass to sensor networks for heads-up data visualization<\/p>\n\n\n\n<p>&#8211; <strong>Augmented Reality Experiences<\/strong>: Real-time data overlay and interaction<\/p>\n\n\n\n<p><strong>Best Practices and Considerations<\/strong><\/p>\n\n\n\n<p>When implementing Glass connections in your own applications, consider these best practices:<\/p>\n\n\n\n<p>1. <strong>Error Handling<\/strong>: Always implement robust error handling for connection failures, timeouts, and unexpected disconnections.<\/p>\n\n\n\n<p>2. <strong>Battery Optimization<\/strong>: Glass devices have limited battery life. Minimize unnecessary communication and implement efficient data protocols.<\/p>\n\n\n\n<p>3. <strong>Security<\/strong>: Ensure all communications are properly encrypted and authenticated, especially in enterprise environments.<\/p>\n\n\n\n<p>4. <strong>**User Experience**<\/strong>: Provide clear feedback about connection status and any issues that arise.<\/p>\n\n\n\n<p><strong>## Future Developments<\/strong><\/p>\n\n\n\n<p>As Google Glass technology continues to evolve, we can expect improvements in:<\/p>\n\n\n\n<p>&#8211; <strong>**Connection Speed**<\/strong>: Bluetooth 5.0+ implementations offering faster data transfer<\/p>\n\n\n\n<p>&#8211; <strong>**Power Efficiency**<\/strong>: Better battery optimization for extended usage<\/p>\n\n\n\n<p>&#8211; <strong>**Protocol Enhancements**<\/strong>: More sophisticated communication protocols for complex applications<\/p>\n\n\n\n<p><strong>## Conclusion<\/strong><\/p>\n\n\n\n<p>The `GlassConnection` class represents a well-architected solution for Bluetooth communication with Google Glass devices. Its careful attention to thread safety, resource management, and event-driven architecture makes it an excellent foundation for building robust Glass applications.<\/p>\n\n\n\n<p>Whether you&#8217;re developing enterprise solutions or exploring the possibilities of augmented reality, understanding the fundamentals of Glass connectivity is essential. This implementation provides a solid starting point and demonstrates the key principles needed for successful Glass integration.<\/p>\n\n\n\n<p>&#8212;<\/p>\n\n\n\n<p><em>For more insights into wearable technology development and AR\/VR applications, follow our blog for regular updates and technical deep-dives.*<\/em><\/p>\n\n\n\n<p><strong>Related Resources<\/strong><\/p>\n\n\n\n<p>&#8211; [Google Glass Enterprise Edition Documentation](https:\/\/developers.google.com\/glass-enterprise)<\/p>\n\n\n\n<p>&#8211; [Android Bluetooth Development Guide](https:\/\/developer.android.com\/guide\/topics\/connectivity\/bluetooth)<\/p>\n\n\n\n<p>&#8211; [RFCOMM Protocol Specification](https:\/\/www.bluetooth.com\/specifications\/specs\/)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 glass_xe_bridge.py\n=== Glass Explorer Edition Bridge Tool ===\nUsing Pixel 7 Pro as Bluetooth bridge to Glass XE\n\n\ud83d\udd0d Checking Glass Bluetooth connection...\n\u2705 Glass 700C detected via Bluetooth\n\ud83d\udcf1 Glass MAC: XX:XX:XX:XX:B9:CB\n\nBridge Options:\n1. Simulate MyGlass handshake\n2. Send bridge commands to Glass\n3. Direct Bluetooth command\n4. Full bridge sequence\n\nSelect option (1-4): 4\n\n=== Simulating MyGlass Handshake ===\n\ud83d\udcf1 Step: HANDSHAKE_INIT\n\ud83d\udce1 Sending to Glass: HANDSHAKE_INIT\n\u26a0\ufe0f  Command failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27404, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Result: Parcel(\n0x00000000: fffffffe 0000002f 00610050 00630072 '....\/...P.a.r.c.'\n0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'\n0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'\n0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'\n0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'\n0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'\n0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'\n0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'\n0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'\n0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'\n0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'\n0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'\n0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'\n0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'\n0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'\n0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'\n0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'\n0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'\n0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'\n0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'\n0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'\n0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'\n0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'\n0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'\n0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'\n0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'\n0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'\n0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'\n0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'\n0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'\n0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'\n0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'\n0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'\n0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'\n0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'\n0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'\n0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'\n0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'\n0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'\n0x00000270: 0000000a                            '....            ')\n\ud83d\udcf1 Step: DEVICE_INFO_REQUEST\n\ud83d\udce1 Sending to Glass: DEVICE_INFO_REQUEST\n\u26a0\ufe0f  Command failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27422, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Result: Parcel(\n0x00000000: fffffffe 0000002f 00610050 00630072 '....\/...P.a.r.c.'\n0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'\n0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'\n0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'\n0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'\n0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'\n0x00000060: 00320020 00000030 0000020c 00000101 ' .2.0...........'\n0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'\n0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'\n0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'\n0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'\n0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'\n0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'\n0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'\n0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'\n0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'\n0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'\n0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'\n0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'\n0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'\n0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'\n0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'\n0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'\n0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'\n0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'\n0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'\n0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'\n0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'\n0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'\n0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'\n0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'\n0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'\n0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'\n0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'\n0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'\n0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'\n0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'\n0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'\n0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'\n0x00000270: 0000000a                            '....            ')\n\ud83d\udcf1 Step: TIMEZONE_SYNC\n\ud83d\udce1 Sending to Glass: TIMEZONE_SYNC\n\u26a0\ufe0f  Command failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27447, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Result: Parcel(\n0x00000000: fffffffe 0000002e 00610050 00630072 '........P.a.r.c.'\n0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'\n0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'\n0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'\n0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'\n0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'\n0x00000060: 00380020 00000000 0000020c 00000101 ' .8.............'\n0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'\n0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'\n0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'\n0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'\n0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'\n0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'\n0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'\n0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'\n0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'\n0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'\n0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'\n0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'\n0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'\n0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'\n0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'\n0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'\n0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'\n0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'\n0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'\n0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'\n0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'\n0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'\n0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'\n0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'\n0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'\n0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'\n0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'\n0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'\n0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'\n0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'\n0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'\n0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'\n0x00000270: 0000000a                            '....            ')\n\ud83d\udcf1 Step: COMPANION_READY\n\ud83d\udce1 Sending to Glass: COMPANION_READY\n\u26a0\ufe0f  Command failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27464, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Result: Parcel(\n0x00000000: fffffffe 0000002f 00610050 00630072 '....\/...P.a.r.c.'\n0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'\n0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'\n0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'\n0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'\n0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'\n0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'\n0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'\n0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'\n0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'\n0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'\n0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'\n0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'\n0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'\n0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'\n0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'\n0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'\n0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'\n0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'\n0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'\n0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'\n0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'\n0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'\n0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'\n0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'\n0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'\n0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'\n0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'\n0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'\n0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'\n0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'\n0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'\n0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'\n0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'\n0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'\n0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'\n0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'\n0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'\n0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'\n0x00000270: 0000000a                            '....            ')\n\ud83d\udcf1 Step: SETUP_COMPLETE\n\ud83d\udce1 Sending to Glass: SETUP_COMPLETE\n\u26a0\ufe0f  Command failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27483, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Result: Parcel(\n0x00000000: fffffffe 0000002f 00610050 00630072 '....\/...P.a.r.c.'\n0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'\n0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'\n0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'\n0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'\n0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'\n0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'\n0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'\n0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'\n0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'\n0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'\n0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'\n0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'\n0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'\n0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'\n0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'\n0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'\n0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'\n0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'\n0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'\n0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'\n0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'\n0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'\n0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'\n0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'\n0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'\n0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'\n0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'\n0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'\n0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'\n0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'\n0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'\n0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'\n0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'\n0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'\n0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'\n0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'\n0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'\n0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'\n0x00000270: 0000000a                            '....            ')\n\ud83d\udcf1 Step: PAIRING_SUCCESS\n\ud83d\udce1 Sending to Glass: PAIRING_SUCCESS\n\u26a0\ufe0f  Command failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27504, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }\nBroadcast completed: result=0\n\u2705 Bluetooth command sent: Result: Parcel(\n0x00000000: fffffffe 0000002f 00610050 00630072 '....\/...P.a.r.c.'\n0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'\n0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'\n0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'\n0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'\n0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'\n0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'\n0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'\n0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'\n0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'\n0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'\n0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'\n0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'\n0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'\n0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'\n0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'\n0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'\n0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'\n0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'\n0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'\n0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'\n0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'\n0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'\n0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'\n0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'\n0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'\n0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'\n0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'\n0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'\n0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'\n0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'\n0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'\n0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'\n0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'\n0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'\n0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'\n0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'\n0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'\n0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'\n0x00000270: 0000000a                            '....            ')\n\n=== Glass XE Bridge Commands ===\n\ud83c\udf09 Glass setup complete...\n\u2705 Glass setup complete sent\n\ud83d\udce1 Broadcasting: Intent { act=com.google.glass.action.SETUP_COMPLETE flg=0x400000 }\nBroadcast completed: result=0\n\ud83c\udf09 Companion ready...\n\u2705 Companion ready sent\n\ud83d\udce1 Broadcasting: Intent { act=com.google.glass.action.COMPANION_READY flg=0x400000 }\nBroadcast completed: result=0\n\ud83c\udf09 Timeline update...\n\u2705 Timeline update sent\n\ud83d\udce1 Broadcasting: Intent { act=com.google.glass.action.TIMELINE_UPDATE flg=0x400000 }\nBroadcast completed: result=0\n\ud83c\udf09 Glass notification...\n\u2705 Glass notification sent\n\ud83d\udce1 Broadcasting: Intent { act=android.intent.action.MAIN flg=0x400000 pkg=Glass! (has extras) }\nBroadcast completed: result=0\n\ud83c\udf09 Pairing success...\n\u274c Pairing success failed: \nException occurred while executing 'broadcast':\njava.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.device.action.PAIRING_REQUEST from pid=27545, uid=2000\n        at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)\n        at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)\n        at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)\n        at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)\n        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)\n        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)\n        at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)\n        at android.os.ShellCommand.exec(ShellCommand.java:38)\n        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)\n        at android.os.Binder.shellCommand(Binder.java:1151)\n        at android.os.Binder.onTransact(Binder.java:953)\n        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)\n        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)\n        at android.os.Binder.execTransactInternal(Binder.java:1426)\n        at android.os.Binder.execTransact(Binder.java:1365)\n\n\n=== Checking for Glass Response ===\n\ud83d\udcdd Glass-related logs:\n  08-05 17:03:34.260  1445  3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }: 0\n  08-05 17:03:38.814  1445  3936 I ActivityManager: Broadcasting: Intent { act=com.google.glass.action.SETUP_COMPLETE flg=0x400000 }\n  08-05 17:03:38.814  1445  3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.SETUP_COMPLETE flg=0x400000 }: 0\n  08-05 17:03:40.033  1445  3936 I ActivityManager: Broadcasting: Intent { act=com.google.glass.action.COMPANION_READY flg=0x400000 }\n  08-05 17:03:40.034  1445  3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.COMPANION_READY flg=0x400000 }: 0\n  08-05 17:03:41.293  1445  3936 I ActivityManager: Broadcasting: Intent { act=com.google.glass.action.TIMELINE_UPDATE flg=0x400000 }\n  08-05 17:03:41.293  1445  3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.TIMELINE_UPDATE flg=0x400000 }: 0\n  08-05 17:03:42.500  1445  4599 I ActivityManager: Broadcasting: Intent { act=android.intent.action.MAIN flg=0x400000 pkg=Glass! (has extras) }\n  08-05 17:03:42.501  1445  4599 I ActivityManager: Enqueued broadcast Intent { act=android.intent.action.MAIN flg=0x400000 pkg=Glass! (has extras) }: 0\n\ud83d\udd0d Checking Glass Bluetooth connection...\n\u2705 Glass 700C detected via Bluetooth\n\ud83d\udcf1 Glass MAC: XX:XX:XX:XX:B9:CB\n\n=== Bridge Tool Complete ===\nCheck Glass display for any changes!\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/adb_explorer.sh'\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/adb_magic_commands.sh'\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/adb_explorer.sh'\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/adb_explorer.sh basic'\n\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/adb_explorer.sh basic\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/rf_quantum_scythe_ar.py'\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/verify_mirrored_networking.sh'\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb shell am start -a android.intent.action.VIEW -d \"http:\/\/192.168.1.185:8084\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/rf_quantum_scythe_interface.html\"\n com.android.chrome\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/glass_setup_trigger.sh'\ncd \/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/ &amp;&amp; python3 glass_bypass_tool.py\nchmod +x \/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/glass_bypass_tool.py\npython3 glass_bypass_tool.py\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb devices\nadb install glass_companion_validated.apk\nls | grep glass_companion_validated.apk\nfind \/home\/github_bgilbert1984_NerfEngine -name \"glass_companion_validated.apk\"\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/glass_setup_trigger.sh'\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/generate_glass_qr.py'\nsudo '\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/generate_glass_qr.py'\nsudo python3 \/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/generate_glass_qr.py\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/pixel_compatible\/setup_wireless_adb.sh'\nadb devices\n'\/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/glass_bypass_tool.py'\nsudo bash \/home\/github_bgilbert1984_NerfEngine\/NerfEngine\/RF_QUANTUM_SCYTHE\/GlassVisualization\/glass_bypass_tool.py\nadb devices<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>*Published on August 5, 2025* by Ben Gilbert (Turns out this may be an Explorer Edition Glass after all, so you see some stuff about multiple Glass models.) Introduction Google Glass Enterprise Edition represents a fascinating intersection of wearable technology and enterprise applications. One of the most critical components for creating companion applications is establishing&hellip;&nbsp;<a href=\"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=2675\" rel=\"bookmark\"><span class=\"screen-reader-text\">Building Bluetooth Connections to Google Glass: A Deep Dive into the GlassConnection Class<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2676,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-2675","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-the-truben-show"],"_links":{"self":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/2675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2675"}],"version-history":[{"count":5,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/2675\/revisions"}],"predecessor-version":[{"id":2684,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/2675\/revisions\/2684"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/media\/2676"}],"wp:attachment":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}