我試圖從我的服務器下載一個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);
但它給了我一個解析錯誤消息。
任何人都可以想到一個解決方案?
謝謝。
你看到了什麼錯誤?發佈您的logcat輸出 –
這是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
那麼,當軟件包安裝程序嘗試打開APK時,您將獲得權限被拒絕的錯誤。這可能是因爲APK存在於您的私人數據區域中,並且不能公開訪問(儘管您認爲這適用於XML文件)。你可以嘗試在Intent上設置標誌Intent.FLAG_GRANT_READ_URI_PERMISSION,看看是否有幫助。 –