2010-01-12 100 views
2

這可能是一個非常愚蠢的/ noob類似的問題,但什麼是最好的方法有一個.apk文件,當安裝時將一個zip文件放到SD卡上,在特定的目錄中,從資產或原始文件夾?從.APK文件到SD卡的壓縮

回答

2

我有一個應用程序需要做到這一點,我所做的是檢查我是否需要在SDCard上運行時,如果用戶刪除它,我可以將其替換。這裏是我的代碼:

void copyAssets() 
{ 
    String[] files; 
    try 
    { 
     files = this.getResources().getAssets().list(""); 
    } 
    catch (IOException e1) 
    { 
     return; 
    } 

    if(!mWorkingPath.exists()) 
    { 
     if(!mWorkingPath.mkdirs()) 
     { 
      new AlertDialog.Builder(this) 
       .setTitle(R.string.ERROR) 
       .setMessage(R.string.FAILED_DIR_CREATE) 
       .setPositiveButton(android.R.string.ok, new OnClickListener(){ 
        @Override 
        public void onClick(DialogInterface dialog, int which) 
        { 
         dialog.dismiss(); 
        } 
       }) 
       .create() 
       .show(); 
     } 
    } 

    for(int i = 0; i < files.length; i++) 
    { 
     try 
     { 
      String fileName = files[i]; 

      if(fileName.compareTo("images") == 0 || 
       fileName.compareTo("sounds") == 0 || 
       fileName.compareTo("webkit") == 0) 
      { 
       continue; 
      } 

      File outFile = new File(mWorkingPath, fileName); 
      if(outFile.exists()) continue; 

      InputStream in = getAssets().open(fileName); 
      OutputStream out = new FileOutputStream(outFile); 

      // Transfer bytes from in to out 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) 
      { 
       out.write(buf, 0, len); 
      } 

      in.close(); 
      out.close(); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}