我要做的是在我的Android设备上启动本地服务器,然后从Chromecast连接到Android服务器,以便我可以将图像数据从Android发送到Chromecast。
我到目前为止所做的是在Android上设置一个绑定到127.0.0.1的ServerSocket,然后将一条消息中的localhost信息(端口号)发送到chromecast,告知chromeocket已准备好接受连接并指示Chromecast连接到服务器。但我不知道我应该如何连接它。我已经尝试使用WebSockets连接到ServerSocket但我得到了
WebSocket connection to 'ws://localhost:9147/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
我已经更改了端口号,尝试了“ws”和“wss”,我尝试寻找答案,但我遇到的一切都是“如何将android连接到服务器”或“如何将Android服务器连接到Android客户端“所以如果这是重新发布,我会道歉。
我打算做的是使用Base64图像编码将带有图像数据的String发送到chromecast,然后将图像src设置为。我显然不想使用Cast.CastAPI.sendMessage()。
要清楚,我正在寻找一种使用JavaScript连接到Android服务器的方法。
Android代码运行正常,Chromecast会收到消息但是当它尝试连接时失败。
Android代码:
Runnable bitmapSender = new Runnable() {
private ServerSocket serverSocket;
public static final int SERVERPORT = 9147;
@Override
public void run() {
Socket socket = null;
try {
Log.d(TAG, "Socket binding attempt");
serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress(SERVERPORT));
String message = createJsonMessage(MessageType.socket, "wss://localhost:"+ SERVERPORT);
sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
try {
Log.d(TAG, "Socket thread");
socket = serverSocket.accept();
CommunicationThread commThread = new CommunicationThread(socket);
BitmapExecutorService.execute(commThread);
}catch(IOException e){
e.printStackTrace();
}
}
}
};
使用Javascript:
function connectToSocket(source){
//Connect to socket
window.socket = new WebSocket(source);
socket.onopen = function() {
socket.send('Hello Android');
};
window.socket.onmessage = function(event) {
console.log('Received a message from the server!', data);
var jsonObj = JSON.parse(event.data)
if(jsonObj.type == "image"){
console.log('Image sent :)');
var source = 'data:image/png;base64,'.concat(jsonObj.data)
displayEncodedImage(source);
}
};
由于
编辑:更新 我试图通过localhost连接。这不像我想的那样有效。我仍然没有让图像发送工作,但我现在握手了。我需要做的是发送手机的IP地址。我这样做是通过向清单添加ACCESS_WIFI_STATE权限并使用以下代码获取IP地址:
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());