2014-09-26 16 views
2

我正在尝试构建一个应用程序,该应用程序将自动重新启动恢复并从我的SD卡上刷新一个zip文件。 此应用可以使用系统应用权限,因为我打算将其用作系统应用, 我该怎么做?我怎样才能从应用程序中以编程方式闪光邮编android

我想这个代码

File zip = new File("/sdcard/test.zip"); 
    if(zip.exists()) { 
     Toast.makeText(context,"ZIP EXIST!",Toast.LENGTH_LONG).show(); 

     Process p = Runtime.getRuntime().exec("sh"); 
     OutputStream os = p.getOutputStream(); 
     os.write("mkdir -p /cache/recovery/\n".getBytes()); 
     os.write("echo 'boot-recovery' >/cache/recovery/command\n".getBytes()); 
     String cmd = "echo '--update_package=/sdcard/test.zip' >> /cache/recovery/command\n"; 
     os.write(cmd.getBytes()); 
     os.flush(); 

     // Trigger the reboot 
     PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     powerManager.reboot("recovery"); 
    } 
    else{ 
     Toast.makeText(context,"ZIP NOT EXIST!",Toast.LENGTH_LONG).show(); 
    } 

我也试过这个代码:

Process p = Runtime.getRuntime().exec("/system/bin/sh"); 
    OutputStream os = p.getOutputStream(); 
    os.write("echo 'boot-recovery ' > /cache/recovery/command".getBytes()); 
    os.write("echo '--update_package=/sdcard/test.zip' >> /cache/recovery/command".getBytes()); 
    os.write("echo '--wipe_cache' >> /cache/recovery/command".getBytes()); 
    os.write("echo 'reboot' >> /cache/recovery/command".getBytes()); 
    os.write("reboot recovery".getBytes()); 

    os.flush(); 

     PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
        powerManager.reboot("recovery"); 

但它所做的只是重新启动恢复,它不闪我的拉链。 请帮忙。

PS

我使用的是Android L移动在Nexus 5 TWRP恢复

回答

1

我相信,你的问题是因为不同的Android版本,在豆形软糖(4.1)和更高版本的SD卡数据被放置在目录/storage/emulated/0/sdcard您正在使用是指/storage/emulated目录,因此,要得到它的工作,你必须将目录更改为/sdcard/0这将使得命令,如下:

  • 第一方式:

    String cmd = "echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command\n"; 
    
  • 第二方式:

    os.write("echo '--update_package=/sdcard/0/test.zip' >> /cache/recovery/command".getBytes()); 
    
相关问题