没网络的情况下低端安卓开发 低端机闪退手机连接不到电脑怎么办

4006人阅读
socket编程机制:客户端与服务端通过socket套接字连接后都会返回一个实例对象,分别保存这个对象,就相当于保存的对方的地址。Socket理解为一个可以连通网络上不同计算机程序之间的管道,把一堆数据从管道的A端扔进去,则会从管道的B端出来。管道的端口由两个因素来唯一确认,即机器的IP地址和程序所使用的端口号。端口号就是程序员指定的一个数字,许多著名的木马程序在网络上扫描不同的端口号就是为了获取一个可以连通的端口从而进行破坏。程序不要使用太小的端口号,它们一般被系统占用了,也不要使用一些常用的端口,一般来说使用<span style="color:#ff~5000之内的端口比较好。
实现功能:
1.实现手机相册中的单个图片上传到电脑指定路径。(手机相册存在固定位置/sdcard/DCIM/Camera/...)
输入*.jpg,*.jpeg等
2.修改之前上传固定位置的单个图片为输入相册中的多个图片名称,用逗号“,”分隔开,然后上传到电脑,提示用户是否上传成功。
3.因为上传照片很难分清哪个照片需要添加照片描述,后来想使用ExpandableListView下拉列表让用户选择图片内容类型,选择后自动添加到输入框和图片名称以“:”分开,上传电脑以此描述类型命名为图片名称,为防止图片重名,前面加上上传时原图片名称,上传同一张图片时才会发生覆盖,不会引起图片丢失,还能直观查看图片内容描述。
4.改善项目功能范围太小的缺陷,添加输入手机内某个文件所在路径,就可获取路径下的所有图片全部上传到电脑。
注意:测试时最好用真机,否则虚拟机虚拟内存没有图片无法测试功能是否成功。
1.首先搭建好客户端环境,新建android-project ,新建activity
将手机中的图片发送字节给服务端
2.创建手机界面布局mainactivity.xml
&&&&& 界面中有textview、EditText、Button、ExpandableListView控件
这里的界面效果:
3.MainActivity----socket客户端:接收手机图片信息并处理
完成任务1.在固定路径下(sdcard/./.)查找图片文件,输入图片名称实现上传,
&&&&&&&&&&&&&&&2.实现输入手机内图片文件的绝对路径,然后点击上传按钮,可将图片上传到电脑指定位置。服务器来接收图片并指定存放位置。
&&&&&&&&&&&&&&&3.实现选择图片的类型并将其图片复制后重命名,以便用户在电脑分辨图片内容并使用。
&&&&&&&&&&&&&&&4.ExpandableListView下拉列表的的学习和使用,重写下拉列表适配器,显示自定义样式
&&&&&&&&&&&&&&&5.截取原图片的名称使其与图片内容类型共同组成上传后的图片名称。例如:a.jpg&图片内容类型为旅游,则重命名的名称为旅游a.jpg
public class UploadPhotoActivity extends Activity {
private String ip = &10.11.204.34&;//电脑ip地址,在本地连接的属性下查找本机地址
private int port = 4652;//端口号
String[] imgS
ExpandableListV
boolean result =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upload_photo);
查找组件img 、seriesUpload、filePath、exp。。。。
exp.setAdapter(getAdapter());
//点击子视图文本触发事件
exp.setOnChildClickListener(new OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
String nowString=img.getText().toString().concat(&:&+getAdapter().getChild(groupPosition, childPosition).toString());
img.setText(nowString);
exp.collapseGroup(0);//选择子文本后收缩下拉列表
//根据图片名称实现上传
mButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String strString = img.getText().toString();
imgStrings = new String[] {};
if (strString.trim().length() == 0)
if (strString.contains(&,&)) {// 多张图片上传
imgStrings = strString.split(&,&);
for (int i = 0; i & imgStrings. i++) {
if(imgStrings[i].contains(&:&))
upload(imgStrings[i].split(&:&)[0],imgStrings[i].split(&:&)[1]);
upload(imgStrings[i], &&);
getResult(i+1);
} else {//只传一张图片
if(strString.contains(&:&)){//选择图片描述
upload(strString.split(&:&)[0],strString.split(&:&)[1]);
else//没有选择图片描述
upload(strString, &&);
getResult(1);
//根据文件夹路径上传文件内一系列图片
seriesUpload.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String pathString = filePath.getText().toString();
imgStrings = new String[] {};
if (pathString.trim().length() == 0)
String[] paths=listFile(filePath.getText().toString());
if (paths.length==0) {// 文件夹没有图片
Toast.makeText(UploadPhotoActivity.this, &文件夹内没有可传图片文件!&,
Toast.LENGTH_SHORT).show();
for (int j = 0; j & paths. j++) {
seriesUpload(paths[j]);
getResult(j);//提示是否已上传成功
//i代表上传的图片索引,返回上传结果
private void getResult(int i) {
if (file.length() != 0)
Toast.makeText(UploadPhotoActivity.this, &上传成功!&,
Toast.LENGTH_SHORT).show();
Toast.makeText(UploadPhotoActivity.this, &第&+i+&张上传失败,不存在此文件&,
Toast.LENGTH_SHORT).show();
//得到文件夹下的所有图片绝对路径
String[] listFile(String derect) {
File file = new File(derect);
File[] f = file.listFiles();
String Path[] = new String[f.length];
for (int i = 0; i & f. i++)
Path[i] = f[i].getPath();
System.out.println(Path[i]);
// 根据图片名称上传照相机中单个照片
private void upload(String path,String scrip) {
DataOutputS
FileInputS
///sdcard/DCIM/Camera/照相机拍摄后图片所存路径
file = new File(&/sdcard/DCIM/Camera/& + path.trim());
if (file.length() == 0) {
socket = new Socket(ip, port);
dos = new DataOutputStream(socket.getOutputStream());
fis = new FileInputStream(file);
dos.writeUTF(path.substring(0,path.indexOf(&.&))+scrip+path.substring(path.indexOf(&.&)));
dos.flush();
byte[] sendBytes = new byte[1024 * 8];
while ((length = fis.read(sendBytes, 0, sendBytes.length)) & 0) {
dos.write(sendBytes, 0, length);
dos.flush();// 发送给服务器
dos.close();//在发送消息完之后一定关闭,否则服务端无法继续接收信息后处理,手机卡机
/*reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
result = Boolean.parseBoolean(reader.readLine().toString());
System.out.println(&上传结果& + result);//运行时总是提示socket关闭,不能接收服务端返回的消息
reader.close();*/
fis.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (SocketTimeoutException e) {
e.printStackTrace();
Toast.makeText(UploadPhotoActivity.this, &超时,上传失败&,
Toast.LENGTH_LONG).show();
}catch (IOException e) {
e.printStackTrace();
//根据文件夹路径上传所有的图片到服务器
//此dirpath是图片绝对路径
private void seriesUpload(String dirpath) {
DataOutputS
FileInputS
file = new File(dirpath);
if (file.length() == 0) {
socket = new Socket(ip, port);
dos = new DataOutputStream(socket.getOutputStream());
fis = new FileInputStream(file);
dos.writeUTF(dirpath.substring(dirpath.lastIndexOf(&/&)+1));//截取图片名称
dos.flush();
byte[] sendBytes = new byte[1024 * 8];
while ((length = fis.read(sendBytes, 0, sendBytes.length)) & 0) {
dos.write(sendBytes, 0, length);
dos.flush();// 发送给服务器
dos.close();//在发送消息完之后一定关闭,否则服务端无法继续接收信息后处理,手机卡机
fis.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (SocketTimeoutException e) {
e.printStackTrace();
Toast.makeText(UploadPhotoActivity.this, &超时,上传失败&,
Toast.LENGTH_LONG).show();
}catch (IOException e) {
e.printStackTrace();
//下拉列表适配器设置成自己需要的样式
private ExpandableListAdapter getAdapter(){
final String[] generalsTypes = new String[] { &图片分类&};
//子视图显示文字
final String[] generals = new String[] { &地方特色风景&, &个人生活写照、旅游怀念&,&地图拍摄&,&美食&, &工作需求图片&, &办公环境写实&,&天气图片&,&幸福一家人&, &好友、同事照片&, &汽车&,&明星写真&};
//重写adapter类,创建新适配置
ExpandableListAdapter adapter=new ExpandableListAdapter(){
public boolean areAllItemsEnabled() {}
public Object getChild(int groupPosition, int childPosition) {
return generals[childPosition];
public long getChildId(int groupPosition, int childPosition) {
return childP
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
LinearLayout ll = new LinearLayout(
UploadPhotoActivity.this);
ll.setOrientation(0);
TextView textView = new TextView(UploadPhotoActivity.this);
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 64);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setPadding(36, 0, 0, 0);
textView.setTextSize(18);
textView.setText(getChild(groupPosition, childPosition)
.toString());
ll.addView(textView);
public int getChildrenCount(int groupPosition) {return generals.}
public Object getGroup(int groupPosition) {return generalsTypes[groupPosition];}
public int getGroupCount() {return generalsTypes.}
public long getGroupId(int groupPosition) {return groupP}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
LinearLayout ll = new LinearLayout( UploadPhotoActivity.this);
ll.setOrientation(0);
TextView textView = new TextView(UploadPhotoActivity.this);
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 50);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL);
textView.setPadding(80, 5, 0, 0);
textView.setTextSize(20);
textView.setTextColor(Color.BLACK);
textView.setText(getGroup(groupPosition).toString());
ll.addView(textView);
public boolean hasStableIds() {
public boolean isChildSelectable(int groupPosition,
int childPosition) {
@Override。。。。。。一系列要实现的父类的方法
4.创建服务器端,新建java-project,在main方法中写入服务器接收信息代码
&&&& 服务端接收字节写入本地电脑文件内
public class TransFileServer {
public static void main(String[] args) {
uploadThread t = new uploadThread();
t.start();
class uploadThread extends Thread {
private static final int HOST_PORT = 4652;
DataInputStream inputS
FileOutputS
boolean flag =
public void run() {
Socket skt =
ServerSocket server = new ServerSocket(HOST_PORT);
while (true) {
skt = server.accept();
System.out.println(&接收到Socket请求&);
//接收客户端文件
inputStream = new DataInputStream(skt.getInputStream());
PrintWriter writer = new PrintWriter(skt.getOutputStream());
String trueName = inputStream.readUTF();
fos = new FileOutputStream(&D://& + trueName);
byte[] inputByte = new byte[1024 * 8];
while ((length = inputStream.read(inputByte,0,inputByte.length)) & 0) {
System.out.println(&正在接收数据...& + length);
fos.write(inputByte, 0, length);
fos.flush();
System.out.println(&图片接收完成&);
fos.close();
inputStream.close();
// 服务器发送消息
writer.println(flag);// 返回是否接收到图片
writer.flush();
writer.close();
skt.close();
}catch (IOException e) {
e.printStackTrace();
5.可选择使用较完善的获取图片列表方法代码段:
public List&STRING& getPictures(final String strPath) {
List&STRING& list = new ArrayList&STRING&();
File file = new File(strPath);
File[] files = file.listFiles();
if (files == null) {
for(int i = 0; i & files. i++) {
final File f = files[i];
if(f.isFile()) {
int idx = f.getPath().lastIndexOf(&.&);
if (idx &= 0) {
String suffix = f.getPath().substring(idx);
if (suffix.toLowerCase().equals(&.jpg&) ||
suffix.toLowerCase().equals(&.jpeg&) ||
suffix.toLowerCase().equals(&.bmp&) ||
suffix.toLowerCase().equals(&.png&) ||
suffix.toLowerCase().equals(&.gif&) )
list.add(f.getPath());
} catch(Exception e) {
e.printStackTrace();
6.扩展功能;后期将介绍实现文件检索批量上传图片,用户通过Checkbox复选框选择自己要上传的图片(必须是图片文件才可上传,不是图片给用户提示信息),将这些选中的图片可获取图片名称加入到一个list数组保存起来,然后统一上传。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47802次
排名:千里之外
原创:27篇
评论:18条
(3)(1)(1)(6)(1)(4)(7)(3)(1)安卓手机怎么用USB连接电脑上网_百度知道
安卓手机怎么用USB连接电脑上网
手机用数据线连好电脑后,打开设置→应用程序→开发→usb调试,把那个对号点掉,然后打开大容量存储
安卓4.22系统的话打开系统设置,无线和网络,里面有个USB口连接电脑网络开关,打开后连上电脑,设置下网络连接,属性,高级设置,允许其他设备连接网络,然后就好了。想简单的话,下载个金山毒霸免费WIFI,轻松几下就搞定
其他类似问题
为您推荐:
其他4条回答
用USB线连接好手机和电脑
手机的设置-&无线和网络-&绑定与便携式热点-&USB绑定 这一项打对号
这时电脑会弹出安装硬件驱动的对话框,去网上搜下面这行的关键字,是一个手机虚拟网卡驱动
Remote NDIS based Internet Sharing Device
如果你找不到就把邮箱留下,到时我发给你
安装完这个驱动,你打开电脑上面,网上邻居-&属性,看到里面会多一个网卡设备,本地连接x(x是因为每个人电脑配置不一样,我不确定你那边会显示的是几,但如果你是XP系统,在本地连接X的下面会显示一行小字,是标识的设备厂家信息,那串小字是Remote NDIS based Internet Sharing Device)
到这步,说明你已经为你的手机上网安装好电脑上的驱动.
去网上下载两个安装在安卓手机上的软件,一个叫better terminal,一个叫GScript
better terminal是超...
手机驱动配置好的话就能识别啊。。如果是开发的话要设置。。
哎!我昨天搞了一天没搞定,如果你有搞定麻烦吧步骤发给我
手机与台式`电脑能用usb连接,在电脑上但只能打开内存卡存有的文件
安卓手机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 68729|回复: 42
最后登录在线时间37 小时机票474 大叔币0 注册时间阅读权限30主题精华0积分1312UID115619
玩机三段, 积分 1312, 距离下一级还需 688 积分
机票474 大叔币0 最后登录注册时间主题精华0UID115619
[经验教程] [教程] 安卓手机G7 G12通过USB共享电脑PC网络上网的方法教程
通用, 安卓手机, 数据线, 接入点, Android
本帖最后由 GreatWall 于
23:33 编辑
以下帖子内容转自GFAN,感谢原作者billypon
其实该方法是通用的,很多Android的手机都能支持的,具体老版本的Android是否支持我就不清楚了,我没有机器测试,但至少2.1、2.2的固件是没问题的。
下面看图文教程:
1、用数据线连接好USB和PC,先择“仅充电”
下载 (56.36 KB)
设置-&无线和网络-&移动网络设置-&接入点名称,
新建一个接入点,名称为USB网络(其实可以为任意),接入点名称为usb(只要不是可以正常上网的接入点名称都是可以的)
然后保存返回,并启用刚刚建立的接入点
注:其实这一步不是必须的,你可以先用正确的APN连接移动网络或用wifi连接网络也是可以的
&&下载 (55.3 KB)
3、进入 设置-&无线和网络,点击“移动网络”进行连接,这个时候可以看到最底下的USB绑定已经从灰色变成亮的可点的了。
注:一、如果刚刚跳过了第2步,这一步也可以跳过
  二、其实在第1步的时候就可以选择USB绑定了(如果你已经连接的移动网络或者wifi),这样就可以跳过2和3了
  三、正常情况下,连接移动网络后,过一会系统会提示“接入点名称设置不正确,连接失败”,不用理会
&&下载 (76.96 KB)
4、点击USB绑定,系统会多出来一张虚拟网卡,并提示安装驱动程序,可以安装附件中提供的驱动。
驱动安装过程中会有提示,点击仍然继续即可。
注:安装驱动以前要打开系统的DHCP服务,否则会分配不到地址的。(高级用户可以用手动分配地址的方式,这个就自行研究吧)
&&下载 (34.68 KB)
5、驱动安装完了,网络连接里会多出来一个网卡为“Android USB Ethernet/RNDIS”的网络连接,
&&下载 (6.83 KB)
双击它会打开该连接的状态窗口,然后点支持标签,可以看到本机分配到的IP和手机的IP。
例如我的IP是192.168.42.38,手机的IP是192.168.42.129
&&下载 (34.11 KB)
正常情况下,这个时候PC应该是会自动掉线的。
双击本机上网用的网络连接,点属性,点高级,启动“允许其他网络用户通过此计算机的 Internet 连接来连接”(请打开ICS共享服务),关闭“允许其他网络用户控制或禁用共享的 Internet 连接”(不是必须的),然后家庭网络连接中选择刚刚多出来的那个网络连接。例如我的是“本地连接 5”,然后点确定,本机上网用的连接会多出来一只手
&&下载 (47.36 KB)
再双击刚刚多出来的网络连接打开状态窗口,然后点属性,会打开该连接的属性窗口。
在属性窗口中,找到并双击“Internet 协议(TCP/IP)”,会发现IP已经被系统修改过了。
把IP改为192.168.42.1(刚刚我的IP是192.168.42.38,不管分配到的IP是什么,都把最后一个数字改为1。高级用户可以忽略不改),网关和DNS都留空即可,然后确定退出。
&&下载 (46.98 KB)
这个时候可以发现,PC的网络又好了。
6、在手机上打开终端,输入route add default gw 192.168.42.1,如果提示找不到route,则用busybox route add default gw 192.168.42.1,如果还提示找不到busybox,那就用附件中的busybox吧
然后输入setprop net.dns1 192.168.1.1,这是用来设置dns的,如果不设置dns,就只能访问纯ip的网站,设置了dns就可以访问带域名的网站了。
192.168.1.1是我路由器的ip,我路由器有dns服务,自己做了一些静态dns而已。你们可以使用自己常用的dns,例如上海电信的202.96.209.5或google的8.8.8.8
下面我们做一下测试吧,在终端里ping ,能正常返回则表示已经成功了。。。(不要关注我的终端窗口截图,我的不是手机上的终端。手机上可以安装超级终端等一类软件。输入第6步的这些命令我不知道是否需要root权限,因为我的已root,所以我就没测试)
&&下载 (66.24 KB)
用浏览器打开网页看看
&&下载 (124.07 KB)
谢谢大家,支持的请回帖鼓励一下~~~!
补充说明一下:第一次的PC需要这样设置,如果以后还在同一台PC上共享网络上网,只需要重复1、3、6几个步骤即可
1、连接数据线,选择仅充电
2、进入 设置-&无线和网络,点击“移动网络”进行连接,USB绑定亮起来以后点击USB绑定
3、手机进入终端,输入route add default gw 192.168.42.1和setprop net.dns1 8.8.8.8
高级用户可以把最后需要输入的东西写成脚本,我就是这么做的
最近在研究PHP for Android,等研究出来了,把这些指令变成一个应用上的按钮,一点就行,不需要打,哇哈哈
busybox-armv6l.rar (16.66 KB) 下载次数: 358
tetherxp.rar (1.54 KB)&&
摘自HtcBBs 原帖请阅:http://www.htcbbs.net/thread-.html
本帖子中包含更多资源
才可以下载或查看,没有帐号?
移动叔叔论坛 - 论坛版权
1、发帖作者在本主题帖中的所有言论和图片纯属个人意见,与立场无关
2、发帖作者在本站发表的所有标注为原创的主题帖,其相关版权归发帖作者和所有
3、其他单位或个人若进行使用、转载或引用本文时,需同时征得该发帖作者和的同意
4、发帖作者必须承担一切因本文的发表而直接或者间接导致的民事或刑事法律责任
5、本主题帖的部分内容可能来源于网络,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请提供有效证明材料联系本站,本站将及时删除并致以最深的歉意
7、管理员和版主有权不事先通知随时删除本文
最后登录在线时间37 小时机票474 大叔币0 注册时间阅读权限30主题精华0积分1312UID115619
玩机三段, 积分 1312, 距离下一级还需 688 积分
机票474 大叔币0 最后登录注册时间主题精华0UID115619
&&首 发 的 发的不好请见谅
最后登录在线时间8 小时机票8 大叔币0 注册时间阅读权限10主题精华0积分174UID152199
玩机一段, 积分 174, 距离下一级还需 76 积分
机票8 大叔币0 最后登录注册时间主题精华0UID152199
顶了!正好需要这样的知识。
最后登录在线时间3 小时机票55 大叔币0 注册时间阅读权限10主题精华0积分160UID183164
玩机一段, 积分 160, 距离下一级还需 90 积分
机票55 大叔币0 最后登录注册时间主题精华0UID183164
最后登录在线时间3 小时机票55 大叔币0 注册时间阅读权限10主题精华0积分160UID183164
玩机一段, 积分 160, 距离下一级还需 90 积分
机票55 大叔币0 最后登录注册时间主题精华0UID183164
很费劲。。。还没成功。。
最后登录在线时间0 小时机票0 大叔币0 注册时间阅读权限10主题精华0积分-1UID208965
未验证用户, 积分 -1, 距离下一级还需 1 积分
机票0 大叔币0 最后登录注册时间主题精华0UID208965
试试看,但是不成功啊
最后登录在线时间0 小时机票1 大叔币0 注册时间阅读权限1主题精华0积分5UID207770
新注册用户, 积分 5, 距离下一级还需 45 积分
机票1 大叔币0 最后登录注册时间主题精华0UID207770
顶。。 我手机流量不够用
最后登录在线时间2 小时机票2 大叔币0 注册时间阅读权限1主题精华0积分35UID75239
新注册用户, 积分 35, 距离下一级还需 15 积分
机票2 大叔币0 最后登录注册时间主题精华0UID75239
好东西好东西
最后登录在线时间147 小时机票1 大叔币0 注册时间阅读权限0主题精华0积分3944UID159277
头像被屏蔽
机票1 大叔币0 最后登录注册时间主题精华0UID159277
提示: 作者被禁止或删除 内容自动屏蔽
最后登录在线时间1 小时机票0 大叔币0 注册时间阅读权限1主题精华0积分9UID246610
新注册用户, 积分 9, 距离下一级还需 41 积分
机票0 大叔币0 最后登录注册时间主题精华0UID246610
在那选 仅充电 我找不到在哪设置的
最后登录在线时间3 小时机票8 大叔币0 注册时间阅读权限10主题精华0积分123UID158986
玩机一段, 积分 123, 距离下一级还需 127 积分
机票8 大叔币0 最后登录注册时间主题精华0UID158986
苹果251314
& & 怎么做到的啊?求详解。
最后登录在线时间0 小时机票6 大叔币0 注册时间阅读权限1主题精华0积分10UID388620
新注册用户, 积分 10, 距离下一级还需 40 积分
机票6 大叔币0 最后登录注册时间主题精华0UID388620
我找了很久终于找到了。
站长推荐 /1
一加2代手机试玩活动招募正式开始!试用条件并不复杂,欢迎参加!奖品丰厚,想把一加2带回家?赶紧戳入
移动叔叔. 版权所有,专业的网络售后平台 (
商务合作||||本类阅读排行
本类推荐阅读
本类好评文章}

我要回帖

更多关于 手机慢安卓系统怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信