android学习: 酷狗手机遥控器

来源:互联网 发布:java 转义双引号 编辑:程序博客网 时间:2024/04/29 18:00

前言: 学习,掌握Android下套接字的使用.与MFC套接字的通信.

1. 需求: 手机端控制电脑酷狗播放, 上/下一曲, 声音增/减

2. 分析: 手机端用Android , 电脑使用MFC框架实现.酷狗中有全局热键,因此我们可以通过模拟键盘按键从而达到切歌等操作.

3. 手机端实现:  


digraph G{fontname="kaiti";label="酷狗手机遥控";edge[fontname="kaiti"];node[shape=record, fontname="kaiti"]{ServiceKugou[label="{(ServiceKugou)连接电脑服务端|发送消息 \|接收消息(Runnable)}"];ControlKugou[label = "{(ControlKugou)响应界面消息|产生相应消息通过ServiceKugou发送出去}"];  CommandType[label="{(CommandType)控制消息集(enum)|播放\|暂停\|上下曲\|声音增减|NEXT_MUSIC\| LAST_MUSIC\| PLAY\| PAUSE\| SOUND_MINUS\| SOUND_PLUS;}"];Main[label="(MainActivity)主界面"];};Main -> ControlKugou -> ServiceKugou[label="消息:播放\|暂停\|上下曲\|声音增减"];ServiceKugou->CommandType[arrowhead = none];node[shape=plaintext]{ControlKugou:w -> 单例;Main:w -> 界面布局;}}

4.电脑端实现:具体操作封装成一个类.

digraph G{fontname="kaiti";label="电脑控制端";edge[fontname="kaiti"];node[shape=record]{TcpLuv[label="{TcpLuv|- sListen:SOCKET\l|+ StartServer(void): void\l+ ListenProc(LPVOID): DWORD WINAPI\l+ RecvMessageProc(LPVOID): DWORD WINAPI \l+ GetHostIp(CString&): void\l+ SendMessage(void): void\l+ SendKeyEvent(char*): void\l}"];};}


最后实现效果:

电脑:

手机:


总结:

Android端:

1.在使用socket时 需要在AndroidManifest.xml清单声明使用权限:

<uses-permission android:name="android.permission.INTERNET" />
并且在MainActivity中的onCreate()添加如下代码:

if (android.os.Build.VERSION.SDK_INT > 9) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);}
2. 在输入输出流中:

// pWriter.println(content); //此句..对MFC socket阻塞,对方收不到消息pWriter.print(content);// 发送给服务器pWriter.flush();
输入中:
try {//此处也不可用readlinelen = bReader.read(buffer);string = new String(buffer, 0, len);Log.i("TAG", string);
3. 正则表达式验证是否输入正确ip:

private boolean checkIp(String ipString) {if (TextUtils.isEmpty(ipString)) {Toast.makeText(this,getResources().getText(R.string.ip_is_empty),Toast.LENGTH_SHORT).show();return false;}// 正则表达式ip:port//String pat = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}:\\d+";//ipString pat = "^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";Pattern p = Pattern.compile(pat);if (!p.matcher(ipString).matches()) {Toast.makeText(this,getResources().getText(R.string.ip_is_error),Toast.LENGTH_SHORT).show();return false;}return true;}

电脑端:

模拟按键消息:

if (strcmp(dataBuf, "PLAY")==0 || strcmp(dataBuf, "PAUSE")==0) {keybd_event(VK_MENU, 0, 0, 0);keybd_event(VK_F5, 0, 0, 0);keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);}else if (strcmp(dataBuf, "NEXT_MUSIC")==0){

本来想获得酷狗的hwnd 从而可发送给手机客户端当前的歌曲信息等信息, 但貌似酷狗的主界面是无标题的,kugou_ui类也不对哦.



0 0
原创粉丝点击