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;
}