ScreenShot嗨,我正在为Autobahn Library尝试BroadCastClient演示。
它在Emulator上工作正常,成功连接服务器,但是当我在真正的Android设备上安装时,它无法正常工作,无法连接到服务器。
在这两种情况下我使用的是Localhost。我能够从浏览器连接到Localhost。
static final String TAG = "de.tavendo.autobahn.broadcast";
private static final String PREFS_NAME = "AutobahnAndroidBroadcast";
static EditText mHostname;
static EditText mPort;
static TextView mStatusline;
static Button mStart;
static EditText mMessage;
static Button mSendMessage;
static TextView mLog;
static ScrollView mLogScroller;
private SharedPreferences mSettings;
private void alert(String message) {
Toast toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
}
private void loadPrefs() {
mHostname.setText(mSettings.getString("hostname", "Localhost"));
mPort.setText(mSettings.getString("port", "9000"));
}
private void savePrefs() {
SharedPreferences.Editor editor = mSettings.edit();
editor.putString("hostname", mHostname.getText().toString());
editor.putString("port", mPort.getText().toString());
editor.commit();
}
private void setButtonConnect() {
mHostname.setEnabled(true);
mPort.setEnabled(true);
mStart.setText("Connect");
mStart.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
start();
}
});
}
private void setButtonDisconnect() {
mHostname.setEnabled(false);
mPort.setEnabled(false);
mStart.setText("Disconnect");
mStart.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mConnection.disconnect();
}
});
}
private final WebSocket mConnection = new WebSocketConnection();
private void start() {
final String wsuri = "ws://" + mHostname.getText() + ":" + mPort.getText();
mStatusline.setText("Status: Connecting to " + wsuri + " ..");
setButtonDisconnect();
try {
mConnection.connect(wsuri, new WebSocketConnectionHandler() {
@Override
public void onOpen() {
mStatusline.setText("Status: Connected to " + wsuri);
savePrefs();
mSendMessage.setEnabled(true);
mMessage.setEnabled(true);
}
@Override
public void onTextMessage(String payload) {
mLog.setText(mLog.getText() + "\n" + payload);
mLogScroller.post(new Runnable()
{
public void run()
{
mLogScroller.smoothScrollTo(0, mLog.getBottom());
}
});
}
@Override
public void onClose(int code, String reason) {
alert("Connection lost.");
mStatusline.setText("Status: Ready.");
setButtonConnect();
mSendMessage.setEnabled(false);
mMessage.setEnabled(false);
}
});
} catch (WebSocketException e) {
Log.d(TAG, e.toString());
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHostname = (EditText) findViewById(R.id.hostname);
mPort = (EditText) findViewById(R.id.port);
mStatusline = (TextView) findViewById(R.id.statusline);
mStart = (Button) findViewById(R.id.start);
mMessage = (EditText) findViewById(R.id.msg);
mSendMessage = (Button) findViewById(R.id.sendMsg);
mLog = (TextView) findViewById(R.id.log);
mLogScroller = (ScrollView) findViewById(R.id.logscroller);
mSettings = getSharedPreferences(PREFS_NAME, 0);
loadPrefs();
setButtonConnect();
mSendMessage.setEnabled(false);
mMessage.setEnabled(false);
mSendMessage.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mConnection.sendTextMessage(mMessage.getText().toString());
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mConnection.isConnected()) {
mConnection.disconnect();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.quit:
finish();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}