从Android设备开发的远程PC桌面

时间:2014-04-07 10:05:36

标签: android remote-desktop pc

我正在尝试开发具有远程访问功能的Android应用。我一直在搜索关于如何制作远程桌面以及最有效的方法的类似帖子,但我还没有找到关于此的信息。

现在我尝试发送屏幕截图并在ImageView上显示每个截图。它可以工作,但在应用程序结束之前,ImageView不会刷新。我尝试在postInvalidate()上使用invalidate()AsyncTask,但它没有用。

我也想知道开发远程桌面应用程序是否有更好的方法(甚至是不同的方法)。我想自己做,所以我不想使用任何应用程序作为TeamViewer或类似的。

感谢您的帮助。这是我的代码:

客户端

public class MainActivity extends Activity {

static Button boton;
static byte[] imagen;
static ImageView imagenVista;
static Bitmap bmp;
static Socket clientSocket;
static OutputStream os;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    boton = (Button)findViewById(R.id.button1);
    boton.setOnClickListener(evento);
    imagenVista = (ImageView)findViewById(R.id.imageView1);
}

private OnClickListener evento = new OnClickListener() {

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    public void onClick(View v) {

        if (boton.getText().equals("Start")){
            boton.setText("Stop");

            try{                       
                if (android.os.Build.VERSION.SDK_INT > 9) { 
                    StrictMode.ThreadPolicy policy = new        StrictMode.ThreadPolicy.Builder().permitAll().build(); 
                    StrictMode.setThreadPolicy(policy); 
                }                                       

                while(true){

                    Socket clientSocket= new Socket();                  
                    InetSocketAddress addr=new InetSocketAddress("10.209.0.93", 5555);
                    clientSocket.connect(addr);
                    OutputStream os=clientSocket.getOutputStream();
                    os.write("capture".getBytes());
                    ObjectInputStream entrada = new ObjectInputStream(clientSocket.getInputStream());

                    construyendo_img(entrada)
                    new TareaSegundoPlano().doInBackground(entrada);

                     entrada.close();
                     os.flush();
                     clientSocket.close();                                              
                }

            }catch(Exception e){
                e.printStackTrace();
            }
         }

        else{
            boton.setText("Start");
        }
    }
};

public void construyendo_img(ObjectInputStream entrada)throws IOException,      ClassNotFoundException{       

      byte[] bytes_img = (byte[]) entrada.readObject();
      ByteArrayInputStream entrada_img = new ByteArrayInputStream(bytes_img);

      bmp = BitmapFactory.decodeByteArray(bytes_img, 0, bytes_img.length);
      imagenVista.setImageBitmap(bmp);

}

public class TareaSegundoPlano extends AsyncTask<Void, ObjectInputStream, Void>{                 
        protected void onPreExecute(){}  

        protected Void doInBackground(ObjectInputStream... params) {                
            imagenVista.invalidate();               
            return null;
        }

        protected void onProgressUpdate(Void... values) {}

        protected void onPostExecute(Void result){}

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub
            return null;
        }    
    }
}

0 个答案:

没有答案