Unable to get the focused window from device

本文介绍了解决在使用Eclipse进行Android开发时遇到的问题,即模拟器和真机设备在DDMS中显示可以debug的状态,但不显示进程信息,且HierarchyView不可用的情况。通过重新启动adb server和删除工作空间中的.metadata文件夹,问题得以解决。

最近做项目 出现一个问题,打开模拟器,或者真机在DDMS的device中可以看到设备,

并显示可以debug的状态,但是不显示进程的信息,并且Hierachy View也不可以用。

在控制台的打印信息如下:

[2015-02-09 15:22:53 - hierarchyviewer]Failed to remove forward for device emulator-5554: Connection refused: connect
[2015-02-09 15:22:55 - hierarchyviewer]Unable to get view server version from device a1a87803
[2015-02-09 15:22:55 - hierarchyviewer]Unable to get view server protocol version from device a1a87803
[2015-02-09 15:22:55 - ViewServerDevice]Unable to debug device: samsung-sch_i869-a1a87803
[2015-02-09 15:22:55 - hierarchyviewer]Missing forwarded port for a1a87803
[2015-02-09 15:22:55 - hierarchyviewer]Unable to get the focused window from device a1a87803
解决办法:

       重新启动adb server,运行如下命令:

       在root权限下adb kill-server      adb start-server

 

解决办法:删除工作空间中的.metadata 文件夹

一下为详细步骤:

(1):打开eclipse工作空间(在位置在你的eclipse中菜单windows ——> Preferences ——> General  Startup and Shutdown ——>Workspaces  里面显示)

(2):关闭eclipse , 删除上面打开的工作空间中.metadata 文件夹

(3):点击 gotoWorkspaces (就是那个最后面的向右的箭头)发现eclipsse中没有任何项目

(4):(导入项目)点击File菜单 import按钮 打开对话框中选择General中Existing Prjoect into workspace 再点击 Next 第一行中右面按钮选择Browse选择workspase所在的位置(刚刚删除了文件夹的那个文件夹)点击finish 完成项目的导入(不要选择copy project into workspace)


 

 

### 处理另一显示器上的聚焦窗口 当应用程序涉及多显示器环境时,处理不同显示器上具有焦点的窗口是一个复杂的问题。通常情况下,在Android环境中,开发者主要关注单个设备屏幕的行为;然而对于支持多个显示输出的应用程序来说,则需要额外考虑。 为了管理其他显示器上的聚焦窗口,可以利用`DisplayManager`类来枚举连接到系统的各个显示屏,并通过`Presentation`类创建专门用于辅助显示器的内容展示[^2]。具体实现方式如下: ```java // 获取 DisplayManager 实例 DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); // 注册监听器以接收有关可用显示列表更改的通知 displayManager.registerDisplayListener(new DisplayManager.DisplayListener() { @Override public void onDisplayAdded(int displayId) { // 当新显示器被添加时调用此方法 Log.d("MultiDisplay", "New display added with ID:" + displayId); // 创建 Presentation 对象并将其绑定至特定显示器 Display display = displayManager.getDisplay(displayId); if (display != null && isValidForPresentation(display)) { // 自定义验证逻辑 presentation = new MyCustomPresentation(MainActivity.this, display); presentation.show(); } } @Override public void onDisplayChanged(int displayId) {} @Override public void onDisplayRemoved(int displayId) {} }, null); ``` 上述代码展示了如何检测新的显示器加入以及如何针对这些显示器实例化一个新的 `Presentation` 来承载UI组件。需要注意的是,这里假设存在一个名为 `MyCustomPresentation` 的自定义 `Presentation` 子类,该子类负责构建实际要呈现给用户的界面布局。 一旦成功设置了第二个屏幕上运行的应用部分,就可以像平常一样操作这个独立视图内的控件和事件响应机制了。不过要注意保持两个屏幕间交互的一致性和用户体验的整体协调性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值