打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
android万能遥控器之二

用手机遥控电视我想过几个方案,包括一些事后才知道很荒唐可笑的方案,比如,我以为既然红光和蓝光可以合成紫光,那么同样也可以通过f=f0-f1的方式得到红外光。如果这样,那么我们就可以用手机屏幕做一个红外发射装置。其实这是不可能的,因为:1.所谓红光和蓝光可以合成紫光其实是人眼的错觉,并没有产生实际上的紫光。2.手机屏幕的刷新频率达不到38KHz。

 

虽然如此,我还是实验着写个程序,设置不同颜色并不断变化颜色的条纹。可想而知,用红外接收器抓了一晚上,也没有抓到任何信号。

 

用手机的闪光灯去做红外发射装置据说是可行的,因为闪光灯会产生副产品,副产品中就包括红外光。但是有两个原因会影响它的遥控距离(猜测):1.副产品中红外光太弱。2。闪光灯太发散。有人做了实验,用这种方式制作的遥控器,遥控距离只有1米左右。可惜我的手机没有闪光灯,有机会倒是可以试试。

 

也有人试图通过手机耳机去控制一个外加的红外发光二极管。这种方式不知道效果如何,因为估计耳机很难达到38KHz的频率。但是说不定不用38KHz也可的,接收到红外遥控信号的38KHz载波信号其实很弱。有时间再试试。

 

我还是一如既往地通过s3c6410的开发板实现的。即,手机通过wifi发送指令到带wifi的开发板,然后开放板去控制红外发生器。

 

其实,这不是我想要的方式,因为需要在手机上安装一个客户端。我最想通过在浏览器里submit指令的方式去实现。恩,先就这样,下一步再去试着实现。

 

代码如下,自然,又是在网上抄的,学名叫“来料加工”:

 

服务器端:

AndroidManifest.xml

<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.auly.control"
     android:versionCode="1"
     android:versionName="1.0">


   <application android:icon="@drawable/icon"android:label="@string/app_name">
       <activity android:name=".vibrator"
                 android:label="@string/app_name">
           <intent-filter>
               <action android:name="android.intent.action.MAIN"/>
               <categoryandroid:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>

   </application>
    <uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>
</manifest>

 

另外:相对前一篇博文http://blog.sina.com.cn/s/blog_64c980320100wq0x.html,vibrator.java改变为:

package com.auly.control;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import android.widget.EditText;
//import android.widget.TextView;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;

public class vibrator extends Activity {
 public static final int VIB_ON = 1;
 public static final int VIB_OFF = 0;
 private EditText EditMessage;
 vibClass mvibClass;
 Thread sThread=null;
    intmyMESSAGE=1;
    Stringstr;
    publicHandler sHandler = newHandler(){  
       public void handleMessage(Message msg){  
           int i = msg.what;  
              
           if(i ==myMESSAGE){                      
            EditMessage.setText(str); 
            if(str.equals("VOL+")){
             vibClass.IOCTLVIB(0,VIB_ON,true,"");
             EditMessage.setText("vol+++");}
            
           else {  
               //un-support message type  
            
        
    };
@Override
  public void onCreate(BundlesavedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  EditMessage=(EditText)findViewById(R.id.EditMessage);
//       Start=(Button)findViewById(R.id.Start);
//       EditIP=(EditText)findViewById(R.id. EditIP);
       str="str";
       sThread = new Thread(newRunnable(){  
           public voidrun(){             
                try {
                 ServerSocket serverSocket=newServerSocket(8080);
                 //str="openserver";
                 while(true)
                 {
                  //System.out.println("接收用户连接:");
                  //接受客户端请求
                  Socketclient=serverSocket.accept();
                  //System.out.println("accept:");
                  try
                  {
                 //接受客户端信息
                   BufferedReaderin=new BufferedReader(newInputStreamReader(client.getInputStream()));
                   str=in.readLine();
                   str=str.toUpperCase();
                   
                   Messagem = new Message();  
                            m.what =myMESSAGE;                         
                            sHandler.sendMessage(m);  
                            //str="sendMessage";
                   //System.out.println("read:"+str);
                 
                 //向服务器发送消息
                   PrintWriterout=new PrintWriter(new BufferedWriter(newOutputStreamWriter(client.getOutputStream())),true);
                   in.close();
                   out.close();
                  }catch(Exceptionex)
                  {
                   System.out.println(ex.getMessage());
                   ex.printStackTrace();
                  }
                  finally
                  {
                   client.close();
                   //System.out.println("close");
                  }
                  }
                  } catch(IOException e) {
                   System.out.println(e.getMessage());
                  }
                 
        });          
       

       sThread.start();

  mvibClass = newvibClass();
  vibClass.Init();
  final Button btn1 =(Button)findViewById(R.id.button1);
  btn1.setOnClickListener(newView.OnClickListener()
  {
   public voidonClick(View v)
   {
    vibClass.IOCTLVIB(0,VIB_ON,true,"");
    EditMessage.setText(str);
   }
  });
  }
}

 

客户端:

package net.testSocket;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
//客户端的实现
public class TestSocket extends Activity {
 private TextView text1;
 private Button but1;
 private EditText edit1;
 private final String DEBUG_TAG="mySocketAct";


    public voidonCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       
       text1=(TextView)findViewById(R.id.text1);
       but1=(Button)findViewById(R.id.but1);
       edit1=(EditText)findViewById(R.id.edit);
       
       but1.setOnClickListener(new Button.OnClickListener()
       {
        @Override
   public voidonClick(View v) {
    Socketsocket=null;
    Stringmesg=edit1.getText().toString()+"\r\n";
    edit1.setText("");
    Log.e("dddd","sent id");
    
    try{
     socket=newSocket("192.168.1.102",8080);
     //向服务器发送信息
     PrintWriterout=new PrintWriter(new BufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
     out.println(mesg);
     
     //接受服务器的信息
     BufferedReaderbr=new BufferedReader(newInputStreamReader(socket.getInputStream()));
     Stringmstr=br.readLine();
     if(mstr!=null)
     {
      text1.setText(mstr);
     }else
     {
      text1.setText("数据错误");
     }
     out.close();
     br.close();
     socket.close();
    }catch (UnknownHostException e) {
     e.printStackTrace();
    }catch (IOException e) {
     e.printStackTrace();
    }catch(Exceptione)
    {
     Log.e(DEBUG_TAG,e.toString());
    }
          
       });
    }
}

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Android数据存储(2)向机身内存(Internal Storage)和SDcard(External Storage)读写数据实例
Android中利用httpclient进行网络通信的方法(以用户登录为例说明)
android 应用程序学习1
加法计算器
Android计算器开发实例
Android ListView添加多种类型的ItemView
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服