【问题标题】:Android Download Manager save to /systemAndroid 下载管理器保存到 /system
【发布时间】:2016-05-13 20:44:20
【问题描述】:

我只是在玩 Android Studio,我正在尝试弄清楚如何将文件下载到 /system。

我知道我需要 root 并且我已经让那部分工作了,我遇到的唯一问题是

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

目标是下载一个文件并将其保存到/system,文件名为test.jpg。

所以最后是文件位于/system/test.jpg。

问题在于,DownloadManager 将其保存到内部存储并创建了一个名为“system”的新文件夹。

我可以看出它与 setDestinationInExternalPublicDir 有关,但我只是不确定将其更改为什么。

再次感谢

【问题讨论】:

  • 你需要从 android 源代码重新编译 android ......说真的,猜猜 InExternalPublicDir 在方法名称中的含义......然后想想是 /system/ExternalPublicDir ......显然您应该将文件保存在某处,然后复制/移动到/system/(当然以root身份复制/移动)

标签: java android android-download-manager


【解决方案1】:

我所做的是:
(这是我的一个项目的一部分)

/*****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();
}

wait-until-download-complete-thingy 有点 hacky,我发现它here。它可能不适用于下载时间超过 5 秒的文件

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2021-11-06
    • 2012-05-20
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多