2016-02-04 151 views
1

我只是在玩Android Studio,我試圖弄清楚如何將文件下載到/ system。Android下載管理器保存到/ system

我明白我需要根這一點,我已經得到了部分的工作,我有唯一的麻煩是

request.setDestinationInExternalPublicDir("/system/", "test.jpg");

目標是要下載一個文件,並將其保存到/系統文件名爲test.jpg。

所以最後是文件位於/system/test.jpg。

問題在於DownloadManager將其保存到內部存儲並正在創建一個名爲'system'的新文件夾。

我可以告訴它與setDestinationInExternalPublicDir有關,但我不知道該如何改變它。

再次感謝

+0

您需要重新編譯從android源的android ...認真,猜測什麼'InExternalPublicDir'意味着在方法名稱...然後只是想'/system /'一個'ExternalPublicDir' ...顯然你應該把文件保存在某個地方,然後複製/移動到'/ system /'(當然是以root身份複製/移動) – Selvin

回答

0

我所做的是:
(這是在我的一個項目的一部分)

/*****DOWNLOAD FILE*****/ 
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://github.com/pelya/android-keyboard-gadget/blob/master/hid-gadget-test/hid-gadget-test?raw=true")); 
request.setDescription("hid-gadget-test"); 
request.setTitle("hid-gadget-test"); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    request.allowScanningByMediaScanner(); 
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); 
} 
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "hid-gadget-test"); /*****SAVE TO DOWNLOAD FOLDER*****/ 


DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
manager.enqueue(request); 

File mvfile = new File("/sdcard/"+Environment.DIRECTORY_DOWNLOADS+"/hid-gadget-test"); 
while (!mvfile.exists()) {} /*****WAIT UNTIL DOWNLOAD COMPLETE*****/ 
try { 
    Thread.sleep(5000); 
} catch (InterruptedException ignored) {} 


try { /*****RUN MV-COMMAND TO MOVE TO ROOT DIR*****/ 
    Process su = Runtime.getRuntime().exec("su"); 
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); 

    outputStream.writeBytes("mv /sdcard/"+Environment.DIRECTORY_DOWNLOADS+"/hid-gadget-test /data/local/tmp/hid-gadget-test\n"); 
    outputStream.flush(); 

    outputStream.writeBytes("exit\n"); 
    outputStream.flush(); 
    su.waitFor(); 
} catch (IOException e) { 
    Toast.makeText(getApplicationContext(), "IOException", Toast.LENGTH_SHORT).show(); 
} catch (InterruptedException e) { 
    Toast.makeText(getApplicationContext(), "InterruptedException", Toast.LENGTH_SHORT).show(); 
} 

等待,直至下載完成 -thingy有點哈克,我發現它here。它可能不適用於需要超過5秒的文件下載