android学习: 酷狗手机遥控器

前言: 学习,掌握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 {
			//此处也不可用readline
			len = 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+";
		//ip
		String 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值