android wear传文件,如何进行Socket连接并从Android Wear向服务器发送数据

该程序使用Socket编程将陀螺仪和加速度计信息(6位数)发送到服务器.

我的问题是如何进行套接字连接并从Android Wear向服务器发送数据(使用套接字连接)

这是完整的程序::

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

import com.example.helloandroid.R;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.content.Context;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.os.Bundle;

import android.os.StrictMode;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

public class HelloAndroid extends Activity implements SensorEventListener,Runnable {

private SensorManager sensorManager;

TextView x1; // declare X axis object

TextView y1; // declare Y axis object

TextView z1; // declare Z axis object

TextView x2; // declare X axis object

TextView y2; // declare Y axis object

TextView z2; // declare Z axis object

String x1Str,y1Str,z1Str,x2Str,y2Str,z2Str ;

String oldX1,oldY1,oldZ1,oldX2,oldY2,oldZ2;

Button sendAtATime,startContinous,dataChanged;

private boolean startStop = false ,valueChanged = true;

Context context ;

public HelloAndroid(){}

public HelloAndroid(String x1Str, String y1Str, String z1Str, String x2Str,

String y2Str, String z2Str) {

super();

this.x1Str = x1Str;

this.y1Str = y1Str;

this.z1Str = z1Str;

this.x2Str = x2Str;

this.y2Str = y2Str;

this.z2Str = z2Str;

}

@SuppressLint("NewApi") @Override

public void onCreate(Bundle savedInstanceState){

context = getApplicationContext();

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork() // or .detectAll() for all detectable problems

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.detectLeakedClosableObjects()

.penaltyLog()

.penaltyDeath()

.build());

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

x1=(TextView)findViewById(R.id.x1); // create X axis object

y1=(TextView)findViewById(R.id.y1); // create Y axis object

z1=(TextView)findViewById(R.id.z1); // create Z axis object

x2=(TextView)findViewById(R.id.x2); // create X axis object

y2=(TextView)findViewById(R.id.y2); // create Y axis object

z2=(TextView)findViewById(R.id.z2); // create Z axis object

sendAtATime = (Button)findViewById(R.id.sendAtATime);

startContinous = (Button)findViewById(R.id.startContinuous);

sendAtATime.setOnClickListener(buttonSendOnClickListener);

startContinous.setOnClickListener(buttonContinuousClickListener);

sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);

// add listener. The listener will be HelloAndroid (this) class

sensorManager.registerListener(this,

sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),

SensorManager.SENSOR_DELAY_NORMAL);

sensorManager.registerListener(this,

sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),

SensorManager.SENSOR_DELAY_NORMAL);

}

public void onAccuracyChanged(Sensor sensor,int accuracy){

}

public void onSensorChanged(SensorEvent event)

{

// check sensor type

if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER)

{

oldX1 = x1.getText().toString();

oldY1 = y1.getText().toString();

oldZ1 = z1.getText().toString();

// assign directions/

float x=event.values[0];

float y=event.values[1];

float z=event.values[2];

x1.setText("X1: "+x);

y1.setText("Y1: "+y);

z1.setText("Z1: "+z);

}

if(event.sensor.getType()==Sensor.TYPE_ORIENTATION)

{

oldX2 = x2.getText().toString();

oldY2 = y2.getText().toString();

oldZ2 = z2.getText().toString();

// assign directions/

float x=event.values[0];

float y=event.values[1];

float z=event.values[2];

x2.setText("X2: "+x);

y2.setText("Y2: "+y);

z2.setText("Z2: "+z);

}

if(x1.getText().toString().equals(oldX1) && y1.getText().toString().equals(oldY1)

&& z1.getText().toString().equals(oldZ1) && x2.getText().toString().equals(oldX2)

&& y2.getText().toString().equals(oldY2) && z2.getText().toString().equals(oldZ2) )

{

valueChanged = false;

}

else

{

valueChanged = true;

}

if(startStop && valueChanged)

{

Thread aThread = new Thread(new HelloAndroid(x1.getText().toString()

,y1.getText().toString()

,z1.getText().toString()

,x2.getText().toString()

,y2.getText().toString()

,z2.getText().toString()));

aThread.run();

}

}

Button.OnClickListener buttonContinuousClickListener = new Button.OnClickListener()

{

public void onClick(View arg0)

{

if(startStop)

{

startStop = false;

startContinous.setText("Send Continous");

return;

}

startStop = true;

startContinous.setText("StopContinous");

}

};

Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener()

{

public void onClick(View arg0)

{

Thread aThread = new Thread(new HelloAndroid(x1.getText().toString()

,y1.getText().toString()

,z1.getText().toString()

,x2.getText().toString()

,y2.getText().toString()

,z2.getText().toString()));

aThread.run();

}

};

public void run()

{

Socket socket = null;

DataOutputStream dataOutputStream = null;

DataInputStream dataInputStream = null;

try

{

socket = new Socket("192.168.1.107", 5000);

dataOutputStream = new DataOutputStream(socket.getOutputStream());

dataInputStream = new DataInputStream(socket.getInputStream());

dataOutputStream.writeUTF("\nAcceleration Values :\n"

+x1Str+"\n"

+y1Str+"\n"

+z1Str+"\n"

+"Orientation Values :\n"

+x2Str+"\n"

+y2Str+"\n"

+z2Str+"\n");

}

catch (UnknownHostException e)

{

e.printStackTrace();

}

catch (IOException e)

{

e.printStackTrace();

}

finally

{

if (socket != null)

{

try

{

socket.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

if (dataOutputStream != null)

{

try

{

dataOutputStream.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

if (dataInputStream != null)

{

try

{

dataInputStream.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

}

}

通过这种方式,我可以使用移动电话将传感器数据发送到服务器.但是,虽然我使用与Android Wear相同的程序,但它没有连接到套接字,因为没有INTERNET连接(因为它没有连接到WIFI)明显!!

我在stackoverflow上阅读了一些相关的主题,但我仍然不确定如何做到这一点?

任何人都可以帮我解决这个问题.

解决方法:

遗憾的是,这是不可能的,因为Android Wear设备无法直接访问Internet(因此无法使用套接字,HttpURLConnection或任何类似的东西).参见例如:

获取可穿戴设备数据的唯一支持方式是使用数据或消息AP,如您提到的文章(Data Layer)中所述.

标签:java,android,sockets,wear-os

来源: https://codeday.me/bug/20190624/1276434.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值