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