2013-04-29 122 views
0

我想下載一個文件,但下載沒有開始在開始我沒有在logcat中發現錯誤,但現在我做的問題是因爲我沒有權限寫一個文件Android文件沒有下載

這裏是我的代碼:

public class UpdateSystem extends Activity { 


    private int progressBarStatus = 0; 
    private Handler progressBarHandler = new Handler(); 
    ProgressBar progressBar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_update_system); 
     download_version task = new download_version(); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar1); 


     Bundle extras = getIntent().getExtras(); 
     String version = extras.getString("version"); 


     task.execute(path/"Example.apk"); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.update_system, menu); 
     return true; 
    } 



    private class download_version extends AsyncTask<String, Integer, String> { 
     @Override 
     protected String doInBackground(String... sUrl) { 
      try { 

       URL url = new URL(sUrl[0]); 

       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

       urlConnection.setRequestMethod("GET"); 

       urlConnection.setDoOutput(true); 

       urlConnection.connect(); 

       // this will be useful so that you can show a typical 0-100% progress bar 
       int fileLength = urlConnection.getContentLength(); 

       // download the file 
       InputStream input = new BufferedInputStream(url.openStream()); 
       OutputStream output = new FileOutputStream("/sdcard/Example.apk"); 

       byte data[] = new byte[1024]; 
       long total = 0; 
       int count; 



       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        publishProgress((int) (total * 100/fileLength)); 
        output.write(data, 0, count); 
       } 

       output.flush(); 
       output.close(); 
       input.close(); 
       return "0"; 
      } catch (Exception e) { 
       Log.d("Error en el sistema", e.getMessage()); 
       return "1"; 
      } 

     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      super.onProgressUpdate(progress); 
      TextView progress_lbl = (TextView)findViewById(R.id.progress_lbl); 
      progress_lbl.setText(""); 
      progress_lbl.setText("Progreso de la descarga: "+progress[0].toString()+"%"); 
      progressBar.setProgress(progress[0]); 
     } 

     @Override 
     protected void onPostExecute(String result){ 
      installApk(); 
     } 

    } 


    private void installApk(){ 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      Uri uri = Uri.fromFile(new File("/sdcard/Example.apk")); 
      intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
      startActivity(intent); 
      System.exit(0); 
     } 

} 

這是logcat的:

04-29 15:54:01.142: D/Error en el sistema(418): /sdcard/Favai.apk (Permission denied) 
04-29 15:54:01.142: D/Error en el sistema(418): java.io.FileNotFoundException: /sdcard/Favai.apk (Permission denied) 
04-29 15:54:01.142: D/Error en el sistema(418):  at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 
04-29 15:54:01.142: D/Error en el sistema(418):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.io.FileOutputStream.<init>(FileOutputStream.java:97) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.io.FileOutputStream.<init>(FileOutputStream.java:168) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.io.FileOutputStream.<init>(FileOutputStream.java:147) 
04-29 15:54:01.142: D/Error en el sistema(418):  at srm.favai.UpdateSystem$download_version.doInBackground(UpdateSystem.java:79) 
04-29 15:54:01.142: D/Error en el sistema(418):  at srm.favai.UpdateSystem$download_version.doInBackground(UpdateSystem.java:1) 
04-29 15:54:01.142: D/Error en el sistema(418):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
04-29 15:54:01.142: D/Error en el sistema(418):  at java.lang.Thread.run(Thread.java:1096) 
+0

你必須在清單的權限? – tilpner 2013-04-29 17:52:02

+0

這是我所有的用途permisions: <使用許可權的android:name = 「android.permission.INTERNET對」/> <使用許可權的android:NAME = 「android.permission.READ_PHONE_STATE」/> <使用說明 - 權限android:name =「android.permission.ACCESS_NETWORK_STATE」/> – hidura 2013-04-29 18:02:10

+0

你是否用斷點(或其他)調試過它? – tilpner 2013-04-29 18:05:19

回答

1

您需要添加此權限

android.permission.READ_EXTERNAL_STORAGE 

Read External Storage

+0

我添加了權限,仍然不保存文件。 – hidura 2013-04-29 20:23:22

+0

如果你正在寫作,那麼你需要'android.permission.WRITE_EXTERNAL_STORAGE' – 2013-04-29 20:27:01

+0

我有我的清單權限。 – hidura 2013-04-29 20:30:25