您的位置:首页 > 理论基础 > 计算机网络

哪些年遇到过的Andriod问题(11)如何下载文件到SD卡中?权限集?问题在下载网络中1K的文件时要假死?(Mars的代码有问题吗)

2012-09-11 17:26 901 查看
a) 权限问题

<!--照相:Camera: -->

<uses-permission
android:name="android.permission.CAMERA"/>

<!-- 注意必须在application上面-->

<uses-permission
android:name="android.permission.UPDATE_DEVICE_STATS"/>

<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<!--OnReceiver服务: -->
<receiver
android:name=”.SoundActivity”android:process=”:remote”/

<!-- 添加WiFi以及访问网络的权限:-->

<uses-permission
android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission
android:name="android.permission.INTERNET"
></uses-permission>
<uses-permission
android:name="android.permission.WAKE_LOCK"
></uses-permission>

<!-- 操作外部存储设备文件: -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<!-- 录音时需要的权限: -->
<uses-permission
android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<!-- 录制视频时需要的权限: -->
<uses-permission
android:name="android.permission.CAMERA"></uses-permission>
<uses-permission
android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<!-- 发送短信: -->
<uses-permission
android:name="android.permission.SEND_SMS"></uses-permission>
<!-- 收短信: -->
<uses-permission
android:name="android.permission.RECEIVE_SMS"/>
<!-- 收彩信: -->
<uses-permission
android:name="android.permission.READ_SMS"/>

<!-- GPS: -->
<!-- 上網連線 -->
<uses-permission
android:name="android.permission.INTERNET"></uses-permission>
<!-- GPS定位 -->
<uses-permission
android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- AGPS定位 -->
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

<!-- 另外要注意的是读写sd卡文件必须首先要在Mainifest.xml文件中配置权限:
-->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

b) 如何下载文件

这几天一直在看Mars的视频,他的代码里面分了2个类来实现,看着不方便就合到了一起来看。

private URL
url = null;
String SDPATH = Environment.getExternalStorageDirectory() +
"/";
/**
* 该函数返回整形-1:代表下载文件出错 0:代表下载文件成功
1:代表文件已经存在
*
* @urlStr URL文件的网络地址
* @path文件存储路径
* @fileName文件名
* @isOverride是否覆盖
*/
public
int
downFile(String urlStr, String path, String fileName,
boolean isOverride) {

InputStream inputStream = null;
String sFilePath = path + fileName;
System.out.println("urlStr=" + urlStr);
System.out.println("sFilePath=" + sFilePath);
try {
//文件夹是否存在
if (isFileExist(sFilePath)) {
if (isOverride) {
// 覆盖文件,在网上查了一下,好像比较复杂,要先删除在创建
}
return 1;
} else {
inputStream = getInputStreamFromUrl(urlStr);
File resultFile = write2SDFromInput(path, fileName,inputStream);
if (resultFile ==
null) {
return -1;
}
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}

/**
* 根据URL得到输入流
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
public InputStream
getInputStreamFromUrl(String urlStr)
throws MalformedURLException, IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection)
url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}

c) 如何存储文件

以下是以downFile文件调用方法的顺序记录

/**
* 判断SD卡上的文件夹是否存在
*/
public
boolean
isFileExist(String fileName) {
File file = new File(SDPATH + fileName);
return file.exists();
}

/**
* 将一个InputStream里面的数据写入到SD卡中
*/
public File write2SDFromInput(String path, String fileName, InputStream input) {
File file = null;
OutputStream output = null;
try {
creatSDDir(path); //创建目录
file = creatSDFile(path + fileName); //创建文件
output = new FileOutputStream(file);
int iLength = (int) file.length();
System.out.println(fileName +
" >> " + iLength);//打印文件与长度
byte buffer[] =
new byte[iLength];
while ((input.read(buffer)) != -1) {
output.write(buffer);
}
output.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}

/**
* 在SD卡上创建目录
* @param dirName
*/
public File creatSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
dir.mkdir();
return dir;
}

/**
* 在SD卡上创建文件
* @throws IOException
*/
public File creatSDFile(String fileName)
throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐