最近一直在做比赛的一个项目,实现客户端和PC端的文件互传,其实一开始在看到这个题目的时候,完全不知道怎么去实现,感觉一脸懵逼,后来在查阅了资料以及相关书籍后了解到可以用Socket来进行通信,通过IO流来实现文件的互传,于是开始着手写这个项目。下面来详细介绍
一. 读取手机文件资源。
要传输文件首先要有文件可传,这就要先从手机数据库中读取各种文件资源,包括音乐、视频、图片、文档、压缩包、以及应用安装包。当然我只是列举了一部分常用的,还有很多类型,但是并不是很常用,所以就没有列举出来。
1.音乐
获取手机音乐其实并不难,Android已经将这些都封装好了,手机数据库中音乐的地址是MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;所以直接在这个uri下查找就可以了。附上代码:
public Cursor loadMusic(ContentResolvercontentResolver){
String musicSort = MediaStore.Audio.Media.TITLE;
Cursor musicCursor = contentResolver.query(FileFragment.musicUri, null, null, null,musicSort);
if(musicCursor != null){
while(musicCursor.moveToNext()){
String title =musicCursor.getString(musicCursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist =musicCursor.getString(musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String size =musicCursor.getString(musicCursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
String path =musicCursor.getString(musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA));
MediaFiles song = new MediaFiles();
song.setFileName(title);
song.setFileSize(size);
song.setFilePath(path);
song.setArtist(artist);
musicList.add(song);
}
}
return musicCursor;
}
这样就可以把手机中的音乐文件都包装成添MediaFiles对象加到musicList这个集合中了,其中MediaFiles是我写的一个文件类,包括了文件的一些常用属性,通过title获取到音乐文件的标题,artist获取的是歌手名,size表示音乐文件的大小,path为绝对路径。然后把这些信息分别赋给MediaFiles这个文件对象的对应属性。附上代码:
import android.widget.ImageView;
import java.io.File;
public class MediaFiles{
public intfileImage;
public String fileSize;
public String fileName;
public String artist;
public String filePath;
public ImageView check;
public int count = 0;
public boolean isFile = false;
public void setFileImage(int fileImage){
this.fileImage = fileImage;
}
public void setFileSize(String fileSize){
this.fileSize = fileSize;
}
public void setFileName(String fileName){
this.fileName = fileName;
}
public void setArtist(String artist){
this.artist = artist;
}
public void setFilePath(String filePath){
this.filePath = filePath;
}
public int getFileImage(){
returnfileImage;
}
public String getFileSize(){
returnfileSize;
}
public String getFileName(){
returnfileName;
}
public String getArtist(){
returnartist;
}
public String getFilePath(){
returnfilePath;
}
这样获取手机的音乐资源就完成了! 附上图片
2.视频
和获取音乐资源一样,视频文件还是通过一个uri来在手机数据库中查询的。Uri videoUri =MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 所以获取视频文件就照猫画虎了。附上代码:
public Cursor loadVideo(ContentResolvercontentResolver){
String videoSort = MediaStore.Video.Media.DISPLAY_NAME;
Cursor videoCursor = contentResolver.query(FileFragment.videoUri, null, null, null,videoSort);
if(videoCursor != null){
while(videoCursor.moveToNext()){
String title = videoCursor.getString(videoCursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME));
String size =videoCursor.getString(videoCursor.getColumnIndex(MediaStore.Video.Media.SIZE));
String path = videoCursor.getString(videoCursor.getColumnIndex(MediaStore.Video.Media.DATA));
MediaFiles video