代码库链接:
https://github.com/0rig1n/ST-AMG-Sensortile-Development.git
http://player.youku.com/player.php/sid/XMjUzNDg0Njg5Ng==/v.swf
Sensortile小巧玲珑,功能强大。笔者一直有一个梦想,让我们的生活变得智能而人性化。而sensortile有着实现这一梦想的潜力。在我的规划中,sensortile将作为手上的一个挂件,发挥各式各样的作用。这里我开发了一个非常“有情怀”的功能:麦克风的手势控制。
假想在生活中,你收到了一个电话。你可能需要拿起你的电话,或是掏出你的手机。即便目前最方便的方式,也要按一下耳机上的按钮。然而,我这里的构想可以让这一过程变得更为简单:只需要将手抬到嘴边即可通话;抖一抖手即可挂断电话。舍弃了一切多余的动作,让你的生活更加方便。
在这里十分感谢flyloong网友,笔者在写代码的时候出现了很多奇怪的bug,参考flyloong的代码库后,才理解了bug的成因并修复。因此十分感谢。
这里我分享部分代码,希望对各位有所帮助。
首先,要实现这样的一个功能,需要获取手势数据,并做出相应的调整。
Sensortile默认的手势有Pick_UP(拿起)、Glance(抬大约30°)、Wake_Up(摇一摇),考虑实际,这里选用Pick_UP作为开启手势、摇一摇作为停止手势。收到相应的数据后,更新信号位is_on:
-
- if( f.getName().equals("Gesture")){
- FeatureMemsGesture Gesture = mNode.getFeature(FeatureMemsGesture.class);
- if(Gesture.getGesture(sample)== FeatureMemsGesture.Gesture.PICK_UP){mAudioTrack.play();is_on=true;}
- if(Gesture.getGesture(sample)== FeatureMemsGesture.Gesture.GLANCE){/*mAudioTrack.play();is_on=true;*/}
- if(Gesture.getGesture(sample)== FeatureMemsGesture.Gesture.WAKE_UP){
- synchronized(this) {
- mAudioTrack.pause();
- mAudioTrack.flush();is_on=false;
- }}
- }
随后系统根据信号位做出调整,如果信号位为开启,则打开麦克风;如果为关闭则关闭麦克风
- if(is_on){
- if(!mNode.isEnableNotification(mNode.getFeature(FeatureAudioADPCM.class))) {
- mNode.enableNotification(mNode.getFeature(FeatureAudioADPCM.class));
- }
- if(!mNode.isEnableNotification(mNode.getFeature(FeatureAudioADPCMSync.class))) {
- mNode.enableNotification(mNode.getFeature(FeatureAudioADPCMSync.class));
- }}
- else{
- if(mNode.isEnableNotification(mNode.getFeature(FeatureAudioADPCM.class))) {
- mNode.disableNotification(mNode.getFeature(FeatureAudioADPCM.class));
- }
- if(mNode.isEnableNotification(mNode.getFeature(FeatureAudioADPCMSync.class))) {
- mNode.disableNotification(mNode.getFeature(FeatureAudioADPCMSync.class));
- }
- }