2012-05-31 220 views
0

我試圖從我的服務器下載一個APK文件,並將其保存在手機存儲Android的 - 下載並保存APK文件在手機存儲(不在SD卡)

下面是我使用的代碼:

  String apkLink = "http://10.1.20.53/files/test.apk"; 
      URL url = new URL(apkLink); 
      HttpURLConnection c = (HttpURLConnection) url.openConnection(); 
      c.setRequestMethod("GET"); 
      c.setDoOutput(true); 
      c.connect(); 

      context.getDir("test.apk", Context.MODE_WORLD_WRITEABLE); 
      FileOutputStream fos = context.openFileOutput("app_test.apk", Context.MODE_WORLD_WRITEABLE); 

      InputStream is = c.getInputStream(); 
      fileSize = c.getContentLength(); 
      byte[] buffer1 = new byte[1024]; 
      int len1 = 0; 
      int total = 0; 
      while ((len1 = is.read(buffer1)) != -1) { 
       total += len1; 
       percentage = (int)(total*100/fileSize); 
       publishProgress(); 
       fos.write(buffer1, 0, len1); 
      } 
      fos.close(); 
      is.close(); 

相同的代碼是XML文件的工作的罰款。 (當我正在下載XML文件到手機內存)。

有人可以幫助我嗎?

謝謝


其實我想通了的原因,

context.getDir( 「test.apk」,Context.MODE_WORLD_WRITEABLE);代碼行創建一個名爲「data/data/package_name/app_test.apk」的目錄

但是FileOutputStream fos = context.openFileOutput(「app_test.apk」);創建一個名爲data/data/package_name/files/app_test.apk的目錄

我試圖從data/data/package_name/app_test.apk目錄中讀取文件。

不管怎樣,現在我用這個代碼來執行這個文件,

File f = new File(getFilesDir()+ "/app_test.apk"); 

intent.setDataAndType(Uri.fromFile(f) , "application/vnd.android.package-archive"); 
startActivity(intent); 

但它給了我一個解析錯誤消息。

任何人都可以想到一個解決方案?

謝謝。

+0

你看到了什麼錯誤?發佈您的logcat輸出 –

+0

這是logcat輸出, -------------------------------------- ------ I/ActivityManager(152):開始活動:Intent {act = android.intent.action.VIEW dat = file:///data/data/org.order/files/app_test.apk typ = application/vnd.android.package-archive cmp = com.android.packageinstaller/.PackageInstallerActivity W/zipro(8112):無法打開zip'/data/data/org.order/files/app_app。apk':Permission denied W/PackageParser(8112):無法讀取/data/data/org.order/files/app_test.apk的AndroidManifest.xml W/PackageParser(8112):java.io.FileNotFoundException: AndroidManifest.xml – bimal

+0

那麼,當軟件包安裝程序嘗試打開APK時,您將獲得權限被拒絕的錯誤。這可能是因爲APK存在於您的私人數據區域中,並且不能公開訪問(儘管您認爲這適用於XML文件)。你可以嘗試在Intent上設置標誌Intent.FLAG_GRANT_READ_URI_PERMISSION,看看是否有幫助。 –

回答

0

我已經回答到相似問題here。考慮到你的問題,我有幾種不同的意見,爲什麼它不工作。

  1. 你的應用程序下載apk到它的私人文件夾,也許PackageManager沒有權限讀取這個文件夾。嘗試將應用程序下載到SD卡並運行它。
  2. 也許你的.apk文件沒有正確簽名。您是使用生成的簽名簽署的,還是使用默認測試簽名導出文件?
  3. 如果您在真實設備上進行測試,請檢查是否可以從其他來源安裝文件(不僅來自Google Play市場)
  4. 我不記得確切的內容,但可能要調用PackageManager來安裝需要許可的應用程序。
0

當您創建文件時,請嘗試使用Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE。

相關問題