|
|
@ -2,29 +2,29 @@ package wificar;
|
|
|
|
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.Activity;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.Intent;
|
|
|
|
|
|
|
|
import android.os.AsyncTask;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Message;
|
|
|
|
|
|
|
|
import android.os.StrictMode;
|
|
|
|
import android.os.StrictMode;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.view.KeyEvent;
|
|
|
|
import android.view.KeyEvent;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.View.OnClickListener;
|
|
|
|
|
|
|
|
import android.view.Window;
|
|
|
|
import android.view.Window;
|
|
|
|
import android.view.WindowManager;
|
|
|
|
import android.view.WindowManager;
|
|
|
|
import android.widget.Button;
|
|
|
|
import android.widget.Button;
|
|
|
|
import android.widget.ImageButton;
|
|
|
|
import android.widget.CheckBox;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.RelativeLayout;
|
|
|
|
import android.widget.SeekBar;
|
|
|
|
|
|
|
|
import android.widget.TextView;
|
|
|
|
import android.widget.Toast;
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
|
|
|
|
import androidx.annotation.BinderThread;
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.net.InetAddress;
|
|
|
|
import java.net.InetAddress;
|
|
|
|
import java.net.Socket;
|
|
|
|
import java.net.Socket;
|
|
|
|
import java.net.URL;
|
|
|
|
|
|
|
|
import java.net.UnknownHostException;
|
|
|
|
import java.net.UnknownHostException;
|
|
|
|
import java.sql.Time;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Timer;
|
|
|
|
import java.util.Timer;
|
|
|
|
import java.util.TimerTask;
|
|
|
|
import java.util.TimerTask;
|
|
|
|
|
|
|
|
|
|
|
@ -34,28 +34,181 @@ public class MyVideo extends Activity {
|
|
|
|
public static String CameraIp;
|
|
|
|
public static String CameraIp;
|
|
|
|
public static String CtrlIp;
|
|
|
|
public static String CtrlIp;
|
|
|
|
public static String CtrlPort;
|
|
|
|
public static String CtrlPort;
|
|
|
|
URL videoUrl;
|
|
|
|
|
|
|
|
MySurfaceView r;
|
|
|
|
MySurfaceView r;
|
|
|
|
OutputStream socketWriter;
|
|
|
|
OutputStream socketWriter;
|
|
|
|
private ImageButton TakePhotos;
|
|
|
|
InputStream socketReader;
|
|
|
|
private ImageButton ViewPhotos;
|
|
|
|
SocketListener socketListener2001;
|
|
|
|
|
|
|
|
SoundSocketListener socketListener2002;
|
|
|
|
|
|
|
|
SeekBar xSeekbar;
|
|
|
|
|
|
|
|
Button menuIcon;
|
|
|
|
|
|
|
|
TextView distanceText,lifeCheckText,poseCheckText,suggestionText,avoidText;
|
|
|
|
|
|
|
|
CheckBox distanceBtn,lifeCheckBtn,poseCheckBtn,suggestionBtn,avoidBtn;
|
|
|
|
private Socket socket;
|
|
|
|
private Socket socket;
|
|
|
|
|
|
|
|
private Socket soundSocket;
|
|
|
|
private RockerView rockerView;
|
|
|
|
private RockerView rockerView;
|
|
|
|
|
|
|
|
LinearLayout menu;
|
|
|
|
private long exitTime = 0;
|
|
|
|
private long exitTime = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Timer timer = new Timer();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean btnEnabled = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<View> menuContent = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void showMenuContent() {
|
|
|
|
|
|
|
|
for (View view : menuContent) {
|
|
|
|
|
|
|
|
view.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private void hideMenuContent() {
|
|
|
|
|
|
|
|
for (View view : menuContent) {
|
|
|
|
|
|
|
|
view.setVisibility(View.GONE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题(应用的名字必须要写在setContentView之前,否则会有异常)
|
|
|
|
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题(应用的名字必须要写在setContentView之前,否则会有异常)
|
|
|
|
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
|
|
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
|
|
|
|
|
|
|
|
|
|
setContentView(R.layout.myvideo);
|
|
|
|
setContentView(R.layout.myvideo);
|
|
|
|
|
|
|
|
timer.schedule(new TimerTask() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Thread.sleep(6000);
|
|
|
|
|
|
|
|
runOnUiThread(()->{
|
|
|
|
|
|
|
|
TextView textView = findViewById(R.id.suggestion);
|
|
|
|
|
|
|
|
textView.setText(Configuration.getInstance().getRandomSuggestion());
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, 1000L, 1000L);
|
|
|
|
|
|
|
|
distanceText = findViewById(R.id.distanceText);
|
|
|
|
|
|
|
|
distanceBtn = findViewById(R.id.distanceBtn);
|
|
|
|
|
|
|
|
distanceBtn.setChecked(true);
|
|
|
|
|
|
|
|
distanceBtn.setOnClickListener(view -> {
|
|
|
|
|
|
|
|
CheckBox checkBox = (CheckBox) view;
|
|
|
|
|
|
|
|
LinearLayout layout = findViewById(R.id.distanceLayout);
|
|
|
|
|
|
|
|
if(checkBox.isChecked()) {
|
|
|
|
|
|
|
|
layout.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
} else layout.setVisibility(View.GONE);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lifeCheckText = findViewById(R.id.lifeCheckText);
|
|
|
|
|
|
|
|
lifeCheckBtn = findViewById(R.id.lifeCheckBtn);
|
|
|
|
|
|
|
|
lifeCheckBtn.setChecked(true);
|
|
|
|
|
|
|
|
lifeCheckBtn.setOnClickListener(view -> {
|
|
|
|
|
|
|
|
CheckBox checkBox = (CheckBox) view;
|
|
|
|
|
|
|
|
LinearLayout layout = findViewById(R.id.lifeCheckLayout);
|
|
|
|
|
|
|
|
if(checkBox.isChecked()) {
|
|
|
|
|
|
|
|
layout.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
} else layout.setVisibility(View.GONE);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
poseCheckText = findViewById(R.id.poseCheckText);
|
|
|
|
|
|
|
|
poseCheckBtn = findViewById(R.id.poseCheckBtn);
|
|
|
|
|
|
|
|
poseCheckBtn.setChecked(true);
|
|
|
|
|
|
|
|
poseCheckBtn.setOnClickListener(view -> {
|
|
|
|
|
|
|
|
CheckBox checkBox = (CheckBox) view;
|
|
|
|
|
|
|
|
LinearLayout layout = findViewById(R.id.poseCheckLayout);
|
|
|
|
|
|
|
|
if(checkBox.isChecked()) {
|
|
|
|
|
|
|
|
layout.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
} else layout.setVisibility(View.GONE);
|
|
|
|
|
|
|
|
Configuration.getInstance().poseCheck = checkBox.isChecked();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
suggestionText = findViewById(R.id.suggestionText);
|
|
|
|
|
|
|
|
suggestionBtn = findViewById(R.id.suggestionBtn);
|
|
|
|
|
|
|
|
suggestionBtn.setChecked(false);
|
|
|
|
|
|
|
|
suggestionBtn.setOnClickListener(view -> {
|
|
|
|
|
|
|
|
CheckBox checkBox = (CheckBox) view;
|
|
|
|
|
|
|
|
TextView textView = findViewById(R.id.suggestion);
|
|
|
|
|
|
|
|
if(checkBox.isChecked()) {
|
|
|
|
|
|
|
|
textView.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
} else textView.setVisibility(View.GONE);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
avoidBtn = findViewById(R.id.avoidBtn);
|
|
|
|
|
|
|
|
avoidText = findViewById(R.id.avoidText);
|
|
|
|
|
|
|
|
avoidBtn.setOnClickListener(view -> {
|
|
|
|
|
|
|
|
CheckBox checkBox = (CheckBox) view;
|
|
|
|
|
|
|
|
if(checkBox.isChecked()) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x13, (byte) 0x04, (byte)0x00, (byte) 0xff});
|
|
|
|
|
|
|
|
socketWriter.flush();
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
runOnUiThread(()-> Toast.makeText(this,"网络异常!",Toast.LENGTH_SHORT).show());
|
|
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x13, (byte) 0x00, (byte)0x00, (byte) 0xff});
|
|
|
|
|
|
|
|
socketWriter.flush();
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
runOnUiThread(()-> Toast.makeText(this,"网络异常!",Toast.LENGTH_SHORT).show());
|
|
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
menuContent.add(distanceText);
|
|
|
|
|
|
|
|
menuContent.add(lifeCheckText);
|
|
|
|
|
|
|
|
menuContent.add(poseCheckText);
|
|
|
|
|
|
|
|
menuContent.add(suggestionText);
|
|
|
|
|
|
|
|
menuContent.add(distanceBtn);
|
|
|
|
|
|
|
|
menuContent.add(lifeCheckBtn);
|
|
|
|
|
|
|
|
menuContent.add(poseCheckBtn);
|
|
|
|
|
|
|
|
menuContent.add(suggestionBtn);
|
|
|
|
|
|
|
|
menuContent.add(avoidBtn);
|
|
|
|
|
|
|
|
menuContent.add(avoidText);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hideMenuContent();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
menu = findViewById(R.id.droppedMenu);
|
|
|
|
|
|
|
|
xSeekbar = findViewById(R.id.xSeekbar);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
menuIcon = findViewById(R.id.menuIcon);
|
|
|
|
|
|
|
|
menuIcon.setOnClickListener(view -> {
|
|
|
|
|
|
|
|
btnEnabled = !btnEnabled;
|
|
|
|
|
|
|
|
if(btnEnabled) {
|
|
|
|
|
|
|
|
showMenuContent();
|
|
|
|
|
|
|
|
} else hideMenuContent();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
if(socketWriter == null) return;
|
|
|
|
|
|
|
|
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 0.9)+45), (byte) 0xff});
|
|
|
|
|
|
|
|
socketWriter.flush();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
if (android.os.Build.VERSION.SDK_INT > 9) {
|
|
|
|
if (android.os.Build.VERSION.SDK_INT > 9) {
|
|
|
|
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
|
|
|
|
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
|
|
|
|
StrictMode.setThreadPolicy(policy);
|
|
|
|
StrictMode.setThreadPolicy(policy);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
r = findViewById(R.id.mySurfaceViewVideo);
|
|
|
|
r = findViewById(R.id.mySurfaceViewVideo);
|
|
|
|
TakePhotos = findViewById(R.id.TakePhoto);
|
|
|
|
|
|
|
|
ViewPhotos = findViewById(R.id.ViewPhoto);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Intent intent = getIntent();
|
|
|
|
Intent intent = getIntent();
|
|
|
|
//从Intent当中根据key取得value
|
|
|
|
//从Intent当中根据key取得value
|
|
|
@ -65,31 +218,14 @@ public class MyVideo extends Activity {
|
|
|
|
Log.d("wifirobot", "control is :++++" + CtrlIp);
|
|
|
|
Log.d("wifirobot", "control is :++++" + CtrlIp);
|
|
|
|
Log.d("wifirobot", "CtrlPort is :++++" + CtrlPort);
|
|
|
|
Log.d("wifirobot", "CtrlPort is :++++" + CtrlPort);
|
|
|
|
r.GetCameraIP(CameraIp);
|
|
|
|
r.GetCameraIP(CameraIp);
|
|
|
|
|
|
|
|
InitSocket(this);
|
|
|
|
TakePhotos.setOnClickListener(arg0 -> {
|
|
|
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
|
|
|
if (null != Constant.handler) {
|
|
|
|
|
|
|
|
Message message = new Message();
|
|
|
|
|
|
|
|
message.what = 1;
|
|
|
|
|
|
|
|
Constant.handler.sendMessage(message);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ViewPhotos.setOnClickListener(arg0 -> {
|
|
|
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
|
|
|
Intent intent1 = new Intent();
|
|
|
|
|
|
|
|
intent1.setClass(MyVideo.this, BgPictureShowActivity.class);
|
|
|
|
|
|
|
|
//ͨ¹ýIntent¶ÔÏóÆô¶¯ÁíÍâÒ»¸öActivity
|
|
|
|
|
|
|
|
MyVideo.this.startActivity(intent1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
new Thread(()->InitSocket()).run();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void InitSocket(Activity activity) {
|
|
|
|
|
|
|
|
|
|
|
|
public void InitSocket() {
|
|
|
|
// TODO 测试
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort));
|
|
|
|
socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort));
|
|
|
|
|
|
|
|
soundSocket = new Socket(InetAddress.getByName(CtrlIp), 2002);
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
@ -99,19 +235,21 @@ public class MyVideo extends Activity {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
socketWriter = socket.getOutputStream();
|
|
|
|
socketWriter = socket.getOutputStream();
|
|
|
|
|
|
|
|
socketReader = socket.getInputStream();
|
|
|
|
|
|
|
|
socketListener2001 = new SocketListener(activity,socketReader);
|
|
|
|
|
|
|
|
socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream());
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
LinearLayout rockerLayout = findViewById(R.id.rocketLayout);
|
|
|
|
rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null);
|
|
|
|
rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null);
|
|
|
|
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(1000,1000);
|
|
|
|
rockerLayout.addView(rockerView);
|
|
|
|
addContentView(rockerView,params);
|
|
|
|
|
|
|
|
//Toast.makeText(this,"初始化网络失败!"+e.getMessage(),Toast.LENGTH_LONG).show();
|
|
|
|
//Toast.makeText(this,"初始化网络失败!"+e.getMessage(),Toast.LENGTH_LONG).show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void onDestroy() {
|
|
|
|
public void onDestroy() {
|
|
|
|
super.onDestroy();
|
|
|
|
super.onDestroy();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|