bVNC 客户端源码分析(android)
2016-10-08 17:34
316 查看
1)登录界面
2)桌面Activity
3)启动vnc
4)显示桌面
1)登录界面
com.iiordanov.bVNC.bVNC.java
创建登录界面(填IP,PORT等等
@Override
public void onCreate(Bundle icicle) {
goButton = (Button) findViewById(R.id.buttonGO);
goButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ipText.getText().length() != 0 && portText.getText().length() != 0)
canvasStart();
else
Toast.makeText(view.getContext(), R.string.vnc_server_empty, Toast.LENGTH_LONG).show();
}
});
}
private void canvasStart() {
if (selected == null) return;
MemoryInfo info = Utils.getMemoryInfo(this);
if (info.lowMemory)
System.gc();
start();
}
/**
* Starts the activity which makes a VNC connection and displays the remote desktop.
*/
private void start () {
isConnecting = true;
//从登陆界面读取数据写入bean
updateSelectedFromView();
saveAndWriteRecent();
//启动RemoteCanvasActivity, 参数为selected.Gen_getValues()
Intent intent = new Intent(this, RemoteCanvasActivity.class);
intent.putExtra(Constants.CONNECTION,selected.Gen_getValues());
startActivity(intent);
}
2)桌面Activity
com.iiordanov.bVNC.RemoteCanvasActivity.java
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//读取bean传过来的参数
initialize();
//继续连接,也就是向VNC服务端发起连接
continueConnecting();
}
void continueConnecting () {
// Initialize and define actions for on-screen keys.
initializeOnScreenKeys ();
//实际发起连接
canvas.initializeCanvas(connection, database, new Runnable() {
public void run() {
try { setModes(); } catch (NullPointerException e) { }
}
});
}
3)启动vnc
com.iiordanov.bVNC.RemoteCanvas.java
/**
* Create a view showing a remote desktop connection
* @param context Containing context (activity)
* @param bean Connection settings
* @param setModes Callback to run on UI thread after connection is set up
*/
void initializeCanvas(ConnectionBean bean, Database db, final Runnable setModes) {
Thread t = new Thread () {
public void run() {
try {
if (isSpice) {
startSpiceConnection();
} else if (isRdp) {
startRdpConnection();
} else if (connection.getConnectionType() < 4) {
//启动连接
startVncConnection();
}
}
}
}
}
/**
* Starts a VNC connection using the TightVNC backend.
* @throws Exception
*/
private void startVncConnection() throws Exception {
Log.i(TAG, "Connecting to: " + connection.getAddress() + ", port: " + connection.getPort());
String address = getAddress();
int vncPort = getPort(connection.getPort());
boolean anonTLS = (connection.getConnectionType() == Constants.CONN_TYPE_ANONTLS);
try {
rfb = new RfbProto(decoder, address, vncPort,
connection.getPrefEncoding(), connection.getViewOnly());
Log.v(TAG, "Connected to server: " + address + " at port: " + vncPort);
rfb.initializeAndAuthenticate(connection.getUserName(), connection.getPassword(),
connection.getUseRepeater(), connection.getRepeaterId(), anonTLS);
} catch (Exception e) {
throw new Exception (getContext().getString(R.string.error_vnc_unable_to_connect) + e.getLocalizedMessage());
}
rfbconn = rfb;
pointer = new RemoteVncPointer (rfbconn, RemoteCanvas.this, handler);
keyboard = new RemoteVncKeyboard (rfbconn, RemoteCanvas.this, handler);
rfb.writeClientInit();
rfb.readServerInit();
initializeBitmap (displayWidth, displayHeight);
decoder.setPixelFormat(rfb);
handler.post(new Runnable() {
public void run() {
pd.setMessage(getContext().getString(R.string.info_progress_dialog_downloading));
}
});
sendUnixAuth ();
if (connection.getUseLocalCursor())
initializeSoftCursor();
handler.post(drawableSetter);
handler.post(setModes);
handler.post(desktopInfo);
// Hide progress dialog
if (pd.isShowing())
pd.dismiss();
rfb.processProtocol(this, connection.getUseLocalCursor());
}
4)显示桌面
com.iiordanov.bVNC.RfbProto.java
java实现的RFB图像显示
public void processProtocol () throws Exception {
}
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1072) | 评论(0) | 转发(0) |
0
上一篇:android DPAD
下一篇:android项目增加v7.appcompat
相关热门文章
Android之开发环境搭建
Android自定义View的实现...
AndroidManifest.xml配置文件...
Android相对布局+圆角按钮+Sha...
查看Android应用包名package和...
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
2)桌面Activity
3)启动vnc
4)显示桌面
1)登录界面
com.iiordanov.bVNC.bVNC.java
创建登录界面(填IP,PORT等等
@Override
public void onCreate(Bundle icicle) {
goButton = (Button) findViewById(R.id.buttonGO);
goButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ipText.getText().length() != 0 && portText.getText().length() != 0)
canvasStart();
else
Toast.makeText(view.getContext(), R.string.vnc_server_empty, Toast.LENGTH_LONG).show();
}
});
}
private void canvasStart() {
if (selected == null) return;
MemoryInfo info = Utils.getMemoryInfo(this);
if (info.lowMemory)
System.gc();
start();
}
/**
* Starts the activity which makes a VNC connection and displays the remote desktop.
*/
private void start () {
isConnecting = true;
//从登陆界面读取数据写入bean
updateSelectedFromView();
saveAndWriteRecent();
//启动RemoteCanvasActivity, 参数为selected.Gen_getValues()
Intent intent = new Intent(this, RemoteCanvasActivity.class);
intent.putExtra(Constants.CONNECTION,selected.Gen_getValues());
startActivity(intent);
}
2)桌面Activity
com.iiordanov.bVNC.RemoteCanvasActivity.java
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//读取bean传过来的参数
initialize();
//继续连接,也就是向VNC服务端发起连接
continueConnecting();
}
void continueConnecting () {
// Initialize and define actions for on-screen keys.
initializeOnScreenKeys ();
//实际发起连接
canvas.initializeCanvas(connection, database, new Runnable() {
public void run() {
try { setModes(); } catch (NullPointerException e) { }
}
});
}
3)启动vnc
com.iiordanov.bVNC.RemoteCanvas.java
/**
* Create a view showing a remote desktop connection
* @param context Containing context (activity)
* @param bean Connection settings
* @param setModes Callback to run on UI thread after connection is set up
*/
void initializeCanvas(ConnectionBean bean, Database db, final Runnable setModes) {
Thread t = new Thread () {
public void run() {
try {
if (isSpice) {
startSpiceConnection();
} else if (isRdp) {
startRdpConnection();
} else if (connection.getConnectionType() < 4) {
//启动连接
startVncConnection();
}
}
}
}
}
/**
* Starts a VNC connection using the TightVNC backend.
* @throws Exception
*/
private void startVncConnection() throws Exception {
Log.i(TAG, "Connecting to: " + connection.getAddress() + ", port: " + connection.getPort());
String address = getAddress();
int vncPort = getPort(connection.getPort());
boolean anonTLS = (connection.getConnectionType() == Constants.CONN_TYPE_ANONTLS);
try {
rfb = new RfbProto(decoder, address, vncPort,
connection.getPrefEncoding(), connection.getViewOnly());
Log.v(TAG, "Connected to server: " + address + " at port: " + vncPort);
rfb.initializeAndAuthenticate(connection.getUserName(), connection.getPassword(),
connection.getUseRepeater(), connection.getRepeaterId(), anonTLS);
} catch (Exception e) {
throw new Exception (getContext().getString(R.string.error_vnc_unable_to_connect) + e.getLocalizedMessage());
}
rfbconn = rfb;
pointer = new RemoteVncPointer (rfbconn, RemoteCanvas.this, handler);
keyboard = new RemoteVncKeyboard (rfbconn, RemoteCanvas.this, handler);
rfb.writeClientInit();
rfb.readServerInit();
initializeBitmap (displayWidth, displayHeight);
decoder.setPixelFormat(rfb);
handler.post(new Runnable() {
public void run() {
pd.setMessage(getContext().getString(R.string.info_progress_dialog_downloading));
}
});
sendUnixAuth ();
if (connection.getUseLocalCursor())
initializeSoftCursor();
handler.post(drawableSetter);
handler.post(setModes);
handler.post(desktopInfo);
// Hide progress dialog
if (pd.isShowing())
pd.dismiss();
rfb.processProtocol(this, connection.getUseLocalCursor());
}
4)显示桌面
com.iiordanov.bVNC.RfbProto.java
java实现的RFB图像显示
public void processProtocol () throws Exception {
}
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1072) | 评论(0) | 转发(0) |
0
上一篇:android DPAD
下一篇:android项目增加v7.appcompat
相关热门文章
Android之开发环境搭建
Android自定义View的实现...
AndroidManifest.xml配置文件...
Android相对布局+圆角按钮+Sha...
查看Android应用包名package和...
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 人人网官方Android客户端源码分析(1)
- 开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start
- 开源中国 OsChina Android 客户端源码分析(8)数据库Sqlite
- 【开源中国Android客户端】源码分析 网络数据传输接口
- Android之开源中国客户端源码分析(一)
- 开源中国 OsChina Android 客户端源码分析(13)Fragment学习
- 开源中国 OsChina Android 客户端源码分析(10)双击退出程序
- git-osc-android客户端之源码分析1
- android adb 源码框架分析(5 客户端)
- 开源中国 OsChina Android 客户端源码分析(6)拍照、图库、裁剪
- 开源中国 OsChina Android 客户端源码分析(3)可以拖拽的ScrollView
- xmpp/aSmack源码分析(基于android客户端)
- 人人网官方Android客户端源码分析(2)
- Androidpn 消息推送安卓客户端源码分析
- 开源中国 OsChina Android 客户端源码分析(5)摇一摇
- ECClient红孩子android客户端源码分析之图片加载自动刷新listview
- 【开源中国Android客户端】源码分析(二)网络数据传输接口
- 人人网官方Android客户端源码分析(1)
- 开源中国 OsChina Android 客户端源码分析(12)清理缓存