日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android控制手机强制手机横竖方向,使用android IOIO和安卓手机制作视频遥控小车(控制灯的开关、实时视频传输、方向控制)...

發布時間:2025/3/12 编程问答 18 豆豆

android IOIO是通過安卓手機的USB接口控制的電路板,通過android

IOIO可以不需要太多的硬件知識,通過安卓手機轉接的IOIO板控制外圍設備,配件有紙盒、L298N電機驅動模塊、舊手機一部(系統必須在安卓2.3以上(與IOIO的固件有關)),舊手機電池兩塊,LED燈一組,USB線一根、減速電機帶輪子

兩個、萬向輪一個、杜邦線6根左右就夠了

先搭好硬件環境,然后進行安卓代碼的編寫,以下是代碼:

視頻傳輸部分參考了網上的代碼?

??public

class SocketCameraActivity extends IOIOActivity implements

SurfaceHolder.Callback,

Camera.PreviewCallback{

private SurfaceView

mSurfaceview = null; // SurfaceView對象:(視圖組件)視頻顯示

private

SurfaceHolder mSurfaceHolder = null; //

SurfaceHolder對象:(抽象接口)SurfaceView支持類

private Camera

mCamera = null; // Camera對象,相機預覽

DigitalOutput

left,right,light;

ServerSocket

ser_socket;

Socket

cli_socket;

private String

pUsername="XZY";

private String

serverUrl="192.168.1.100";

private int

serverPort=8888;

private int

VideoPreRate=1;

private int

tempPreRate=0;

private int

VideoQuality=85;

private float

VideoWidthRatio=1;

private float

VideoHeightRatio=1;

private int

VideoWidth=320;

private int

VideoHeight=240;

private int

VideoFormatIndex=0;

private boolean

startSendVideo=false;

private boolean

connectedServer=false;

private Button

myBtn01, myBtn02;

@Override

public void

onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//禁止屏幕休眠

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,

WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

mSurfaceview = (SurfaceView)

findViewById(R.id.camera_preview);

myBtn01=(Button)findViewById(R.id.button1);

myBtn02=(Button)findViewById(R.id.button2);

ServerThread st=new ServerThread();

st.start();

//開始連接主機按鈕

myBtn01.setOnClickListener(new

OnClickListener(){

public

void onClick(View v) {

//Common.SetGPSConnected(LoginActivity.this, false);

if(connectedServer){//停止連接主機,同時斷開傳輸

startSendVideo=false;

connectedServer=false;

myBtn02.setEnabled(false);

myBtn01.setText("開始連接");

myBtn02.setText("開始傳輸");

//斷開連接

Thread th = new

MySendCommondThread("PHONEDISCONNECT|"+pUsername+"|");

th.start();

}

else//連接主機

{

//啟用線程發送命令PHONECONNECT

Thread th = new

MySendCommondThread("PHONECONNECT|"+pUsername+"|");

th.start();

connectedServer=true;

myBtn02.setEnabled(true);

myBtn01.setText("停止連接");

}

}});

myBtn02.setEnabled(false);

myBtn02.setOnClickListener(new

OnClickListener(){

public

void onClick(View v) {

if(startSendVideo)//停止傳輸視頻

{

startSendVideo=false;

myBtn02.setText("開始傳輸");

}

else{ // 開始傳輸視頻

startSendVideo=true;

myBtn02.setText("停止傳輸");

}

}});

}

@Override

public void

onStart()//重新啟動的時候

{

mSurfaceHolder = mSurfaceview.getHolder(); //

綁定SurfaceView,取得SurfaceHolder對象

mSurfaceHolder.addCallback(this); //

SurfaceHolder加入回調接口

mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//

設置顯示器類型,setType必須設置

//讀取配置文件

SharedPreferences preParas =

PreferenceManager.getDefaultSharedPreferences(SocketCameraActivity.this);

pUsername=preParas.getString("Username",

"XZY");

serverUrl=preParas.getString("ServerUrl",

"172.17.95.1");

String tempStr=preParas.getString("ServerPort",

"8888");

serverPort=Integer.parseInt(tempStr);

tempStr=preParas.getString("VideoPreRate",

"1");

VideoPreRate=Integer.parseInt(tempStr);

tempStr=preParas.getString("VideoQuality",

"85");

VideoQuality=Integer.parseInt(tempStr);

tempStr=preParas.getString("VideoWidthRatio",

"100");

VideoWidthRatio=Integer.parseInt(tempStr);

tempStr=preParas.getString("VideoHeightRatio",

"100");

VideoHeightRatio=Integer.parseInt(tempStr);

VideoWidthRatio=VideoWidthRatio/100f;

VideoHeightRatio=VideoHeightRatio/100f;

super.onStart();

}

@Override

protected void

onResume() {

super.onResume();

InitCamera();

}

private void

InitCamera(){

try{

mCamera =

Camera.open();

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

protected void

onPause() {

super.onPause();

try{

if

(mCamera != null) {

mCamera.setPreviewCallback(null); // !!這個必須在前,不然退出出錯

mCamera.stopPreview();

mCamera.release();

mCamera = null;

}

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

public void

surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)

{

// TODO Auto-generated method stub

if (mCamera == null) {

return;

}

mCamera.stopPreview();

mCamera.setPreviewCallback(this);

mCamera.setDisplayOrientation(90);

//設置橫行錄制

//獲取攝像頭參數

Camera.Parameters parameters =

mCamera.getParameters();

Size size =

parameters.getPreviewSize();

VideoWidth=size.width;

VideoHeight=size.height;

VideoFormatIndex=parameters.getPreviewFormat();

mCamera.startPreview();

}

@Override

public void

surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub

try {

if

(mCamera != null) {

mCamera.setPreviewDisplay(mSurfaceHolder);

mCamera.startPreview();

}

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void

surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

if (null != mCamera) {

mCamera.setPreviewCallback(null); // !!這個必須在前,不然退出出錯

mCamera.stopPreview();

mCamera.release();

mCamera =

null;

}

}

@Override

public void

onPreviewFrame(byte[] data, Camera camera) {

// TODO Auto-generated method stub

//如果沒有指令傳輸視頻,就先不傳

if(!startSendVideo)

return;

if(tempPreRate

tempPreRate++;

return;

}

tempPreRate=0;

try {

if(data!=null)

{

Log.d("YuvImage","success");

YuvImage image = new

YuvImage(data,VideoFormatIndex, VideoWidth,

VideoHeight,null);

if(image!=null)

{

ByteArrayOutputStream outstream = new

ByteArrayOutputStream();

//在此設置圖片的尺寸和質量

image.compressToJpeg(new Rect(0, 0,

(int)(VideoWidthRatio*VideoWidth),

(int)(VideoHeightRatio*VideoHeight)), VideoQuality,

outstream);

outstream.flush();

//啟用線程將圖像數據發送出去

Thread th = new

MySendFileThread(outstream,pUsername,serverUrl,serverPort);

th.start();

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

public boolean

onCreateOptionsMenu(Menu menu)

{

menu.add(0,0,0,"系統設置");

menu.add(0,1,1,"關于程序");

menu.add(0,2,2,"退出程序");

return

super.onCreateOptionsMenu(menu);

}

public boolean

onOptionsItemSelected(MenuItem item)

{

super.onOptionsItemSelected(item);//獲取菜單

switch(item.getItemId())//菜單序號

{

case

0:

//系統設置

{

Intent intent=new

Intent(this,SettingActivity.class);

startActivity(intent);

}

break;

case

1://關于程序

{

new

AlertDialog.Builder(this)

.setTitle("關于本程序")

.setMessage("遙控小車程序")

.setPositiveButton

(

"我知道了",

new

DialogInterface.OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int

which)

{

}

}

)

.show();

}

break;

case

2://退出程序

{

//殺掉線程強制退出

android.os.Process.killProcess(android.os.Process.myPid());

}

break;

}

return true;

}

class

MySendCommondThread extends Thread{

private String commond;

public MySendCommondThread(String

commond){

this.commond=commond;

}

public void run(){

//實例化Socket

try

{

Socket socket=new

Socket(serverUrl,serverPort);

PrintWriter out = new

PrintWriter(socket.getOutputStream());

out.println(commond);

out.flush();

} catch

(UnknownHostException e) {

} catch

(IOException e) {

}

}

}

class

MySendFileThread extends Thread{

private String username;

private String ipname;

private int port;

private byte byteBuffer[] = new

byte[1024];

private OutputStream outsocket;

private ByteArrayOutputStream

myoutputstream;

public MySendFileThread(ByteArrayOutputStream

myoutputstream,String username,String ipname,int port){

this.myoutputstream = myoutputstream;

this.username=username;

this.ipname = ipname;

this.port=port;

try

{

myoutputstream.close();

} catch

(IOException e) {

e.printStackTrace();

}

}

public void run() {

try{

//將圖像數據通過Socket發送出去

Socket tempSocket = new

Socket(ipname, port);

outsocket =

tempSocket.getOutputStream();

//寫入頭部數據信息

String

msg=java.net.URLEncoder.encode("PHONEVIDEO|"+username+"|","utf-8");

byte[] buffer=

msg.getBytes();

outsocket.write(buffer);

ByteArrayInputStream

inputstream = new

ByteArrayInputStream(myoutputstream.toByteArray());

int amount;

while ((amount =

inputstream.read(byteBuffer)) != -1) {

outsocket.write(byteBuffer, 0,

amount);

}

myoutputstream.flush();

myoutputstream.close();

tempSocket.close();

Log.d("MySendFileThread","success");

} catch

(IOException e) {

e.printStackTrace();

}

}

}

class Looper extends

BaseIOIOLooper {

@Override

protected void setup() throws

ConnectionLostException {

left=ioio_.openDigitalOutput(1);

right=ioio_.openDigitalOutput(2);

light=ioio_.openDigitalOutput(3);

left.write(true);

right.write(true);

light.write(true);

}

@Override

public void loop() throws

ConnectionLostException {

}

}

@Override

protected IOIOLooper

createIOIOLooper() {

return new Looper();

}

public void

go()

{

try {

left.write(false);

right.write(false);

} catch (ConnectionLostException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

public void

nstop()

{

try {

left.write(true);

right.write(true);

} catch (ConnectionLostException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

public void

goleft()

{

try {

left.write(false);

right.write(true);

} catch (ConnectionLostException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

public void

goright()

{

try {

left.write(true);

right.write(false);

} catch (ConnectionLostException e) {

// TODO

Auto-generated catch block

e.printStackTrace();

}

}

public void

lightOn()

{

try {

light.write(false);

} catch (ConnectionLostException e) {

e.printStackTrace();

}

}

public void

lightOff()

{

try {

light.write(true);

} catch (ConnectionLostException e) {

e.printStackTrace();

}

}

class ServerThread

extends Thread

{

public void run()

{

try

{

ser_socket=new

ServerSocket(8000);

} catch

(IOException e) {

e.printStackTrace();

}

while

(true)

{

try {

cli_socket = ser_socket.accept();

Log.e("接受連接", "accept");

BufferedReader in = new BufferedReader(new

InputStreamReader(cli_socket.getInputStream()));

String str ="";

String temp;

while((temp=in.readLine())!=null)

{

str=str+temp;

Log.e("收到數據",temp);

if(temp.equals("lightOn"))

{

Log.d("收到","lightOn");

lightOn();

}

if(temp.equals("lightOff"))

{

lightOff();

}

if(temp.equals("go"))

{

go();

}

if(temp.equals("nstop"))

{

nstop();

}

if(temp.equals("goleft"))

{

goleft();

}

if(temp.equals("goright"))

{

goright();

}

}

}

catch (Exception

e)

{

e.printStackTrace();

}

finally

{

try

{

cli_socket.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

}

}

}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的android控制手机强制手机横竖方向,使用android IOIO和安卓手机制作视频遥控小车(控制灯的开关、实时视频传输、方向控制)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91av视频网站| 一级爱爱片 | 日韩视频一区二区在线观看 | 大尺度做爰呻吟舌吻情头 | 欧美 日本 国产 | 日韩人成| 精品一区二区久久久久蜜桃 | 影音先锋中文字幕一区二区 | 日韩欧美亚洲一区 | 少妇久久精品 | 国产无套在线观看 | 亚洲国产中文字幕 | 日韩有码一区二区三区 | 午夜黄色福利视频 | 欧美人与禽zozzo性之恋的特点 | 欧美激情综合网 | 成年人黄色网址 | 91看毛片 | 日本特黄特色aaa大片免费 | 久久免费看 | 熟妇五十路六十路息与子 | 国产欧美日韩高清 | 在线视频三区 | 在线天堂v | 花房姑娘免费全集 | 欧美性生交xxxxxdddd | 国产白浆一区二区 | 香蕉综合网 | 日韩一区二区影院 | 久久无码人妻丰满熟妇区毛片 | 娇妻玩4p被三个男人伺候电影 | 欧美日韩一区二区三区在线观看 | 成人在线视屏 | 亚洲逼| 午夜影院免费观看 | 九九热超碰 | 亚洲黄色一区 | 欧美三级一区二区三区 | 91资源在线播放 | 人妻激情偷乱视频一区二区三区 | 特黄特色大片免费视频大全 | 亚洲男人的天堂网 | bbbbbbbbb毛片大片按摩 | 已满十八岁免费观看全集动漫 | 亚洲精品一区中文字幕乱码 | 污污在线看| 91九色视频在线 | 美女高潮视频在线观看 | 日韩国产激情 | 美女流白浆视频 | 精品肉丝脚一区二区三区 | 永久av在线免费观看 | 在线视频1卡二卡三卡 | 亚洲欧美色图 | 国产成人一区二区三区视频 | 国产精品中文字幕在线 | 99久久国产热无码精品免费 | 综合免费视频 | 一本一道波多野结衣一区二区 | 日韩夜夜| а 天堂 在线| 亚洲91精品 | 亚洲激情短视频 | 亚洲成人资源 | 国产午夜视频在线播放 | 午夜福利毛片 | 久久久影院 | 午夜爱爱免费视频 | 丁香花电影免费播放电影 | 国产精品高清在线 | 男女在线观看视频 | 国产美女无遮挡免费 | 亚洲图片激情小说 | 久久精品国产99国产精品 | 日韩一区二区免费播放 | 免费在线中文字幕 | 欧美日韩成人在线 | 手机av免费在线观看 | yw视频在线观看 | 久久久久久久久久一区 | 国产在线观 | 制服丝袜天堂 | 欧美第一页浮力影院 | 日韩中文字幕国产 | 尤物在线免费观看 | 日韩欧美一区二区三区四区 | 国产小视频一区 | 999精品在线| 男人插入女人下面的视频 | 国产乱论视频 | 韩国精品一区 | 久久激情网站 | 亚洲欧美日韩精品色xxx | av免费在线电影 | 久久综合区 | av观看网站 | 国产乱一区二区三区 | 天堂在线资源库 | 岳睡了我中文字幕日本 |