我正在测试t his tutorial implementing an Accessibility Service以捕获USSD菜单上的一些文字。
我第一次在调试模式下使用Android Studio编译和启动应用程序时效果很好:
我可以在调试器中看到这一行:
Log.d(TAG, "onServiceConnected");
在我调用USSD菜单后,我可以按预期在调试器中看到响应消息的内容。
然而,如果我断开手机并且在没有任何修改的情况下再次尝试使用相同的应用程序之后,可访问性服务似乎无法正常工作,甚至无法启动,因为我甚至无法在调试器中看到此Log.d行
Log.d(TAG, "onServiceConnected");
我尝试过以下单元测试:
1。如果我尝试卸载应用程序并重新编译,它仍然无效。
2。如果我卸载应用程序,重新启动手机,然后重新编译,它会再次运行,直到下次我拔下并重新插入USB线以从Android Studio运行新的调试。
第3。如果我只是使用Android Studio的重构选项重命名辅助功能服务(例如在名称后添加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
这是非常奇怪的,为什么会发生这种情况的任何想法?
非常感谢您的建议!