我正在测试他实现辅助功能服务的教程以捕获 USSD 菜单上的一些文本。
我第一次在调试模式下使用 Android Studio 编译和启动应用程序时效果很好:
我可以在调试器中看到这一行:
Log.d(TAG, "onServiceConnected");
在我调用 USSD 菜单后,我可以按预期在调试器中看到响应消息的内容。
但是,如果我断开电话并在没有任何修改的情况下再次尝试相同的应用程序后,辅助功能服务似乎无法工作甚至无法启动,因为我什至无法在调试器中看到这条 Log.d 行
Log.d(TAG, "onServiceConnected");
我尝试了以下单元测试:
1.如果我尝试卸载应用程序并重新编译,它仍然无法正常工作。
2. 如果我卸载应用程序,重新启动手机,然后重新编译,它会再次工作,直到我下次拔下并再次插入 USB 电缆以从 Android Studio 运行新的调试。
3. 如果我只是使用 Android Studio 的重构选项重命名 Accessibility Service(例如在名称后添加 2),它会再次起作用,直到我下次拔下并再次插入 USB 电缆以从 Android Studio 运行新的调试.
当我拔下 USB 电缆并且应用程序无法在下次重新启动时,辅助功能服务似乎在某处卡住或崩溃。我还可以在控制台中看到以下错误消息,这让我认为这是问题所在:
((latest content captured from the USSD popup))
--- the USB cable is unplugged and plugged again ---
03-22 21:43:04.931 5774-5774/com.myapp D/UssdCatcher3: onAccessibilityEvent
03-22 21:43:04.932 5774-5774/com.myapp D/UssdCatcher3: com.myapp.MainActivity
03-22 21:43:12.023 845-1950/? W/ActivityManager: Scheduling restart of crashed service com.myapp/.UssdCatcher3 in 1000ms
03-22 21:43:13.033 845-858/? I/ActivityManager: Start proc 10243:com.myapp/u0a54 for service com.myapp/.UssdCatcher3
03-22 21:43:16.488 845-858/? W/ActivityManager: Scheduling restart of crashed service com.myapp/.UssdCatcher3 in 1000ms
03-22 21:43:16.490 845-858/? I/ActivityManager: Force stopping service ServiceRecord{cb2cd91 u0 com.myapp/.UssdCatcher3}
03-22 21:43:55.225 10882-10882/? W/dex2oat: Compilation of java.lang.Object com.myapp.UssdCatcher3.access$super(com.myapp.UssdCatcher3, java.lang.String, java.lang.Object[]) took 109.013ms
这很奇怪,知道为什么会这样吗?
非常感谢您的建议!