本人使用的是这段代码 http://www.2cto.com/kf/201210/159724.html
使用过程中由于有些许粗心, 纠结了差不多一天,只有两异常:
1.view not attach to the window manager
2.timertask is scheduled already
相关代码:
shakeEventController.setOnShakeListener(new OnShakeListener() { @Override public void OnShake() { //此事件中进行截图 //先隐藏悬浮窗 Log.i("摇一摇context", btnScreenShot.getContext().toString()); wm.removeViewImmediate(btnScreenShot); isAdded = false; //延迟1000MS+设置延迟 截图 if(timer!=null){ timer.cancel(); } timer = new Timer(); if(screenShotTask!=null){ screenShotTask.cancel(); } screenShotTask = new ScreenShotTask(); int delay = 1000 + (shotDelay * 1000); timer.schedule(screenShotTask, delay); } });
下面分析原因:
由于我在做一个截图项目,有一个悬浮按钮,用来截图,当我用摇一摇截图的时候,悬浮按钮需要从windowManager中remove,第一次remove倒是很正常,但是第二次摇的时候,就出现了异常1。这个相当诡异,后来不经意间发现了,在第二次摇一摇的时候,调用了两次remove,然后真想大白。
我的悬浮窗实在一个intentservice中创建的,因此每次onhandleintent的时候就会调用上面那段代码,因此,第一次摇一摇很正常,在第二次摇的时候,shakeEventController中已经存在了一个已注册的ACCELEROMETER的sensor,然后在此调用这段代码,就有两个sensor在监听onshake事件,因此在第二个onshake事件处理的时候,btnScreenShot已经从windowmanager中remove掉了,所以抛出异常:view not attach to the window manager。
第二个异常,同理,这个事件处理了两次,而且几乎是同时的,一个timertask还没完的时候,另一个又schedule,肯定抛出异常:timertask is scheduled already
相关推荐
【Android摇一摇Demo】是一个专门为开发者提供的示例项目,旨在展示如何在Android平台上实现“摇一摇”功能。这个Demo适用于那些希望在自己的应用程序中集成类似微信摇一摇交互体验的开发者。通过学习和参考这个项目...
在Android开发中,实现“微信摇一摇”功能是一个相当有趣的互动体验,它结合了设备的传感器技术,尤其是重力感应器(Gravity Sensor),以及Vibrator服务来模拟真实世界中的摇晃动作。这个功能通常用于游戏、抽奖...
在Android平台上实现“摇一摇”功能是一种常见的交互方式,常用于游戏或应用程序中的抽奖、切换页面等场景。本文将详细解析如何在Android应用中实现类似抽奖的“摇一摇”功能。 首先,我们需要理解“摇一摇”功能的...
此外,"JavaApk源码说明.txt"可能是项目作者提供的源码解读文档,它可能包含了如何实现摇一摇功能的具体步骤和注意事项。"千万别双击.url"可能是一个链接,引导开发者去查阅更多关于传感器编程或者Android开发的资料...
在本场景中,特别提到了“摇一摇”功能的实现,意味着用户摇动设备时,可以触发HTML中的JavaScript事件,进而调用Android程序执行特定操作。 1. **WebView的使用** - 加载网页:通过WebView的`loadUrl()`方法加载...
4. 摇一摇功能:通过识别特定的加速度模式,实现“摇一摇”触发某些操作。 5. 智能防抖:在拍照应用中,加速度传感器可以帮助校正因手抖引起的图像模糊。 五、性能优化 由于传感器事件可能频繁触发,处理它们时应...