哪些年遇到过的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;

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值