哪些年遇到過的Andriod問題(11)如何下載文件到SD卡中?權限集?問題在下載網絡中1K的文件時要假死?(Mars的代碼有問題嗎)

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;

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章