android手机遥控Android机顶盒的Demo

就是采用socket与serversocket直接的通信

机顶盒端代码:

package cn.tvsr.remotedemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class RemoteDemoActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new Thread(new Runnable() {
			@Override
			public void run() {
				ServerSocket server;
				try {
				   server = new ServerSocket(6868);
				   System.out.println("Tvsr:Server Started!");
				   while(true){
						System.out.println("Tvsr:Server Runing!");
					    Socket client = server.accept();
					    InputStream ins = client.getInputStream();
					    BufferedReader br = new BufferedReader(new InputStreamReader(ins));
					    final String tmp = br.readLine();
					    final int keyCode = Integer.parseInt(tmp);
					    runOnUiThread(new Runnable() {
							@Override
							public void run() {
								Toast.makeText(getApplicationContext(),
										"Tvsr:Message received!-->keyCode:"+tmp,
										Toast.LENGTH_LONG).show();
								System.out.println("Tvsr:Message received!-->keyCode:"+tmp);
								RemoteDemoActivity.this.onKeyDown(keyCode,
										new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
							}
						});
				   }
				 } catch (IOException e) {
				    e.printStackTrace();
				}  

			}
		}).start();

    }
}

手机端代码:

package cn.tvsr.controldemo;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;

public class ControlDemoActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		Toast.makeText(getApplicationContext(),
				"keyCode:"+keyCode, Toast.LENGTH_LONG).show();
        try {
     	   Socket socket = new Socket("192.168.5.101", 6868);
     	   OutputStream os = socket.getOutputStream();
     	   PrintStream ps = new PrintStream(os);
     	   ps.println(keyCode);
     	   ps.flush();
     	   ps.close();
     	   os.close();
     	   socket.close();
     	} catch (UnknownHostException e) {
     		System.out.println("Tvsr:Server err!");
     		e.printStackTrace();
     	} catch (IOException e) {
     		System.out.println("Tvsr:Server err!");
     		e.printStackTrace();
     	}
		return super.onKeyDown(keyCode, event);
	}

}
时间: 2024-10-28 14:35:00

android手机遥控Android机顶盒的Demo的相关文章

Android手机闹钟用法实例_Android

本文实例讲述了Android手机闹钟用法.分享给大家供大家参考.具体如下: 一.开发手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以在程序中设置某个应用程序在未来的某个时刻被执行.当AlarmManager定时时间到了之后,当初注册的Intent对象将会被系统广播,进而启动目标程序. 二.在程序运行时当需要使用AlarmManager类时,可以通过Context对象的getSystemService(Context.ALARM_S

Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

记得我之前参与开发过一个华为的项目,要求程序可以支持好几种终端设备,其中就包括Android手机和 Android Pad.然后为了节省人力,公司无节操地让Android手机和Android Pad都由我们团队开发.当时项目 组定的方案是,制作两个版本的App,一个手机版,一个Pad版.由于当时手机版的主体功能已经做的差不多 了,所以Pad版基本上就是把手机版的代码完全拷过来,然后再根据平板的特性部分稍作修改就好了. 但是,从此以后我们就非常苦逼了.每次要添加什么新功能,同样的代码要写两遍.每次

浅析Android手机卫士之手机实现短信指令获取位置_Android

推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 浅析Android手机卫士读取联系人 浅析Android手机卫士接收短信指令执行相应操作 浅析Android手机卫士手机定位的原理 获取位置 新建一个service的包 新建一个GPSService类继承系统的Service类 清单文件中注册一下 重写onCreat

浅析Android手机卫士之号码归属地查询_Android

使用小米号码归属地数据库,有两张表data1和data2 先查询data1表,把手机号码截取前7位 select outkey from data1 where id="前七位手机号" 再查询data2表, select location from data2 where id="上面查出的outkey" 可以使用子查询 select location from data2 where id=(select outkey from data1 where id=&q

浅析Android手机卫士读取联系人_Android

推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 获取ContentResolver内容解析器对象,通过getContentResolver()方法 调用ContentResolver对象的query()方法,得到raw_contacts表里面的数据,得到Cursor对象 参数:Uri对象,字段String数组 获

详解Android 手机卫士设置向导页面_Android

推荐阅读:  浅析Android手机卫士自定义控件的属性 浅析Android手机卫士关闭自动更新 设置向导页面,通过SharedPreferences来判断是否已经设置过了,跳转到不同的页面 自定义样式 在res/values/styles.xml中 添加节点<style name="">,设置名称属性 在<style>节点里面,添加节点<item name="">设置名称属性,就是布局的各种参数 在<item>的文本

浅析Android 手机卫士设备管理权限锁屏_Android

推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 浅析Android手机卫士读取联系人 浅析Android手机卫士接收短信指令执行相应操作 浅析Android手机卫士手机定位的原理 浅析Android手机卫士之手机实现短信指令获取位置 设备管理员 Device Admin 获取DevicePolicyManager

浅析Android手机卫士关闭自动更新_Android

推荐阅读: 浅析Android手机卫士自定义控件的属性 保存数据的四种方式,网络,广播提供者,SharedPreferences,数据库 获取SharedPreferences对象,通过getSharedPreferences()方法,参数:名称,模式 例如config,MODE_PRIVATE 调用SharedPreferences对象的edit()方法,得到Editor对象 调用Editor对象的putBoolean()方法,放入布尔数据,参数:键值对,"update" false

浅析Android手机卫士自定义控件的属性_Android

推荐阅读:浅析Android手机卫士关闭自动更新 上一节完成的自定义组合控件,灵活性不够,控件的显示信息上,仿照系统属性,自定义自己的属性 上一节组合控件SettingItemView中有三个控件,分别是TextView大标题,TextView描述,CheckBox复选框 自定义属性 tsh:title="大标题" 和tsh:desc_on="小标题开启",tsh:desc_off="小标题关闭" 添加命名空间,xmlns:tsh="h