2013-02-21 4 views
0

Используя этот код, я могу загрузить файл с URL-адреса в Android и сохранить его в SDCard, есть ли способ открыть этот файл программно?Как открыть загруженный файл на Android программно?

Может ли Намерение помочь в этом?

private static class Task extends AsyncTask<Void, Void, Void> { 

    static String DownloadUrl = "http://00.00.00.00/abc.crt"; 
    static String fileName = "def.crt"; 

Асинхронный Task загрузить

@Override 
protected Void doInBackground(Void... arg0) { 
    DownloadFromUrl(); 
    return null; 
} 


public static void DownloadFromUrl() { 

    try { 
      File root = android.os.Environment.getExternalStorageDirectory();    

      File dir = new File (root.getAbsolutePath() + "/SDCard"); 
      if(dir.exists()==false) { 
       dir.mkdirs(); 
      } 

      URL url = new URL(DownloadUrl); //you can write here any link 
      File file = new File(dir, fileName); 

      long startTime = System.currentTimeMillis(); 
      Log.d("DownloadManager", "download begining"); 
      Log.d("DownloadManager", "download url:" + url); 
      Log.d("DownloadManager", "downloaded file name:" + fileName); 

      /* Open a connection to that URL. */ 
      URLConnection ucon = url.openConnection(); 

      /* 
      * Define InputStreams to read from the URLConnection. 
      */ 
      InputStream is = ucon.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 

      /* 
      * Read bytes to the Buffer until there is nothing more to read(-1). 
      */ 
      ByteArrayBuffer baf = new ByteArrayBuffer(5000); 
      int current = 0; 
      while ((current = bis.read()) != -1) { 
       baf.append((byte) current); 
      } 

      /* Convert the Bytes read to a String. */ 
      FileOutputStream fos = new FileOutputStream(file); 
      fos.write(baf.toByteArray()); 
      fos.flush(); 
      fos.close(); 
      Log.d("DownloadManager", "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + " sec"); 




    } catch (IOException e) { 
     Log.d("DownloadManager", "Error: " + e); 
    } 

} 


} 
+0

как его открыть? Как текстовое или двоичное или с приложением? – Gjordis

+0

Да, «намерения» - это путь; см. Google или [это] (http://stackoverflow.com/questions/7009452/how-to-launch-browser-to-open-local-file). – adrianp

+0

Когда вы говорите «открыто», что вы имеете в виду? Что такое filetype (как в том, что такое .crt)? Каковы данные? Строка? Аудио? –

ответ

0

Используйте FileInputStream и загрузите загруженный файл в память http://developer.android.com/reference/java/io/FileInputStream.html

Если файл определенного расширения могут быть и другие способы его загрузки что не требует разрешения его на массив байтов

+0

Спасибо Udrian & Matt, в идеале .CRT - это файл сертификата VPN, который при установке всплывает извещения о вводе имени сертификата, а затем устанавливает файл для приложения Android VPN. Я думаю, если мы хотим прочитать файл, то нам нужен FileInputStream, чтобы открыть этот файл, не следует использовать намерения? – user1223035

+0

GJordis будет открыт как двоичный файл, который будет вызывать приложение VPN при открытии – user1223035

+0

Я как-то пропустил, что это был файл .CRT. И да, если вы намерены пригласить пользователя открыть этот файл вне вашего приложения, вы должны использовать намерение. Это может помочь вам немного http://indyvision.net/2010/03/android-using-intents-open-files/ – Udrian

Смежные вопросы