baidu_33301979 2016-06-06 16:36 采纳率: 0%
浏览 1164

android socket问题

package com.example.zzb;

import android.support.v7.app.ActionBarActivity;
import android.text.format.Time;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.io.ByteArrayOutputStream;

import java.io.DataInputStream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import java.io.InputStream;
import java.net.Socket;

import com.example.zzb.MainActivity;

import android.app.Activity;

import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;

import android.graphics.Bitmap.CompressFormat;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Environment;
import android.os.Handler;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

public class MainActivity extends Activity {

private ImageView imageView = null;  
private Bitmap bmp = null;  

/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  

    imageView = (ImageView) findViewById(R.id.imageView1);  
    Button btn = (Button) findViewById(R.id.button1);  
    btn.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {  
            Thread t = new Thread() {  
                @Override  
                public void run() {  
                    super.run();  
                    Socket socket = null;  
                    try {  
                        socket = new Socket("192.168.191.1", 33336);  
                        DataInputStream dataInput = new DataInputStream(  
                                socket.getInputStream());  
                        int size = dataInput.readInt();  
                        byte[] data = new byte[size];  
                        // dataInput.readFully(data);  
                        int len = 0;  
                        while (len < size) {  
                            len += dataInput.read(data, len, size - len);  
                        }  

                        ByteArrayOutputStream outPut = new ByteArrayOutputStream();  
                        bmp = BitmapFactory.decodeByteArray(data, 0,  
                                data.length);  
                        bmp.compress(CompressFormat.PNG, 100, outPut); 
                        /*AssetManager am = null;  
                        am = getAssets();  
                        InputStream is = am.open("R.raw.a");  
                        //imageView.setImageBitmap();  */
                        savePicture(bmp);
                        myHandler.obtainMessage().sendToTarget();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    } finally {  
                        try {  
                            socket.close();  
                        } catch (IOException e) {  
                            e.printStackTrace();  
                        }  
                    }  
                }  
            };  
            t.start();  
        }  
    });  
}  

public void savePicture(Bitmap bitmap) 
{ 
 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
 { 
 try
 { 
 File sdcardDir = Environment 
 .getExternalStorageDirectory(); 
 Time t = new Time(); 
 t.setToNow();
 String filename = sdcardDir.getCanonicalPath() 
 + "/DCIM/camera"
 + String.format( 
 "/ReeCam%04d%02d%02d%02d%02d%02d.jpg", 
 t.year, t.month + 1, t.monthDay, 
 t.hour, t.minute, t.second); 
 File file = new File(filename); 
 FileOutputStream out = new FileOutputStream(file); 
 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
 out.flush(); 
 out.close(); 
 } catch (FileNotFoundException e) 
 { 
 e.printStackTrace(); 
 } catch (IOException e) 
 { 
 e.printStackTrace(); 
 }
 } 
}

private Handler myHandler = new Handler(){  
    public void handleMessage(android.os.Message msg) {  
        imageView.setImageBitmap(bmp);  
    };  
};  

}

这是一个从网上找的代码,然后自己改了就能用了。
我想把这个变一下,变成不用onclick,就是电脑上通过socket发送图片过来,手机自动就能接收并保存到手机上,不用再来一张图片必须点击一下button按钮。
不知道怎么改,试过去掉OnClickListener,然后就发现只能接收第一张图片,后面想接收第二张,必须把应用后台一下,再进入才能接收第二张。
本人安卓小白,希望能得到解决方案。谢谢大家了

  • 写回答

1条回答 默认 最新

  • Robot-C 2016-06-06 16:42
    关注

    在此提前声明,我目前学习主要看的是Mars老师的视频,今天在看有关Socket的编程的时候,出现了一个问题,这个问题很多人都有,但是都没有找到解决的方法,因为在视频中,Mars老师用手机做服务器,然后大家都找不到手机服务器的Ip地址,唉,现在还不知道这个问题该怎么解决呢??......
    答案就在这里:Android中Socket问题
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)