android 线控操作

转自:http://blog.csdn.net/buleriver/article/details/6883234

实现原理:通过广播拦截来实现。

 

(一)定义1个广播拦截器,用来拦截线控耳机按键产生的广播事件。

 

Java代码   收藏代码
  1. import android.content.BroadcastReceiver;  
  2. import android.content.Context;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.os.Message;  
  7. import android.util.Log;  
  8. import android.view.KeyEvent;  
  9.   
  10. public class MediaButtonReceiver extends BroadcastReceiver {  
  11.       
  12.     /** 
  13.      * Handler 
  14.      */  
  15.     private Handler handler;  
  16.       
  17.     /** 
  18.      * 构造器. 
  19.      * @param handler 
  20.      */  
  21.     public MediaButtonReceiver(Handler handler) {  
  22.         this.handler = handler;  
  23.     }  
  24.   
  25.     @Override  
  26.     public void onReceive(Context context, Intent intent) {  
  27.         boolean isActionMediaButton = Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction());  
  28.         if(!isActionMediaButton) return;  
  29.         KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);  
  30.         if(event==nullreturn;  
  31.           
  32.         boolean isActionUp = (event.getAction()==KeyEvent.ACTION_UP);  
  33.         if(!isActionUp) return;  
  34.           
  35.         int keyCode = event.getKeyCode();  
  36.         long eventTime = event.getEventTime()-event.getDownTime();//按键按下到松开的时长  
  37.         Message msg = Message.obtain();  
  38.         msg.what = 100;  
  39.         Bundle data = new Bundle();  
  40.         data.putInt("key_code", keyCode);  
  41.         data.putLong("event_time", eventTime);  
  42.         msg.setData(data);  
  43.         handler.sendMessage(msg);  
  44.           
  45.         //终止广播(不让别的程序收到此广播,免受干扰)  
  46.         abortBroadcast();  
  47.     }  
  48. }  
 

 

(二)在主程序的处理:

 

(1)定义并注册广播服务

Java代码   收藏代码
  1. //初始化Handler对象  
  2. MyHandler handler = new MyHandler();  
  3. //初始化媒体(耳机)广播对象.  
  4. MediaButtonReceiver mediaButtonReceiver = new MediaButtonReceiver(handler);  
  5. //注册媒体(耳机)广播对象  
  6. IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);  
  7. intentFilter.setPriority(100);  
  8. registerReceiver(mediaButtonReceiver, intentFilter);  

 

(2)定义MyHandler和处理广播发回的消息:

Java代码   收藏代码
  1.     private class MyHandler extends Handler{  
  2.     @Override  
  3.     public void handleMessage(Message msg) {  
  4.         int what = msg.what;  
  5.         switch(what){  
  6.         case 100://单击按键广播  
  7.             Bundle data = msg.getData();  
  8.             //按键值  
  9.             int keyCode = data.getInt("key_code");  
  10.             //按键时长  
  11.             long eventTime = data.getLong("event_time");  
  12.             //设置超过2000毫秒,就触发长按事件  
  13.             boolean isLongPress = (eventTime>2000);  
  14.               
  15.             switch(keyCode){  
  16.             case KeyEvent.KEYCODE_HEADSETHOOK://播放或暂停  
  17.             case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE://播放或暂停  
  18.                 playOrPause();  
  19.                 break;  
  20.                   
  21.             //短按=播放下一首音乐,长按=当前音乐快进  
  22.             case KeyEvent.KEYCODE_MEDIA_NEXT:  
  23.                 if(isLongPress){  
  24.                     fastNext(1);//自定义  
  25.                 }else{  
  26.                     playNext();//自定义  
  27.                 }  
  28.                 break;  
  29.                   
  30.             //短按=播放上一首音乐,长按=当前音乐快退    
  31.             case KeyEvent.KEYCODE_MEDIA_PREVIOUS:  
  32.                 if(isLongPress){  
  33.                     fastPrevious(1);//自定义  
  34.                 }else{  
  35.                     playPrevious();//自定义  
  36.                 }  
  37.                 break;  
  38.             }  
  39.               
  40.             break;  
  41.         default://其他消息-则扔回上层处理  
  42.             super.handleMessage(msg);  
  43.         }  
  44.     }  
  45. }  
 

(3)应用程序退出的时候,别忘了取消注册的广播拦截器。

Java代码   收藏代码
  1. unregisterReceiver(mediaButtonReceiver);  
内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值