恢复出厂设置,系统重启,再次进入系统后,我怎样可以得知之前到底是否恢复出厂设置了呢?
怎样可以标记 恢复出厂设置 事件 ,我希望在系统重启后,根据客户需求,添加一些响应,怎么做呢?

解决方案 »

  1.   

    首次起机, EntropyService应该会挂掉,你看看能否得到EntropyService来判断可以不
      

  2.   


    谢谢你,但是我怎么利用它呢?
    loadInitialEntropy();  
    addDeviceSpecificEntropy();  
    writeEntropy();  
    scheduleEntropyWriter();  
      

  3.   

    这个要修改bootable下的recovery.c文件,让他在擦除了usrdata分区之后,再cache分区中加一个标志文件。我的建议是恢复出厂设置的时候会在cache分区的recovery下有log文件,你开机后可以立马去读这个文件,看做了什么,等android跑起来后cache分区会被清空,所以要在适当的时候做处理。
      

  4.   

    哦,android界面跑起来后会删除cache/recovery/log文件,不是清空cache分区。
      

  5.   

    我对上层不是很精通哈,不过我看系统里有很多现成的例子,比如你插着USB线开机,最后UI界面会说USB线连接了。同样的这个log文件在恢复出厂设置的时候是有的,等java层起来后就没了,你可以在最下面的某一个守护进程起来的时候检测这个log文件,然后上报给java层。比如可以用现成的Vold守护进程。
      

  6.   

    vold(sendMsg)-->MountService(sendBroadCast)-->你的UI监听程序
      

  7.   


    插USB线开机启动,在UI界面显示通知这个我可以做到,但是log里我并没有发现有关恢复出厂设置的信息
      

  8.   

    是/cache/recovery/log里,不是logcat
      

  9.   

    …… 
    我分得清/cache/recovery/log 和 logcat 
    都说了是进入系统界面之前了
      

  10.   

    由于某种原因,项目中修改为即使恢复出厂设置,也不会创建/cache/recovery目录,为了提供清cache的速率。 所以这种方法在我们这个项目中不可行。  
    必须从正常重启和恢复出厂设置的差异来入手,/cache 不能利用了
      

  11.   

    如果你是在源码上开发, 这个应该蛮简单的。 一般第一次开机或做factory reset后,肯定会报这个错误:
    W/EntropyService(  761): unable to load initial entropy (first boot?)
    W/EntropyService(  761): java.io.FileNotFoundException: /data/system/entropy.dat (No such file or directory)
    W/EntropyService(  761):        at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
    W/EntropyService(  761):        at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
    W/EntropyService(  761):        at java.io.FileInputStream.<init>(FileInputStream.java:82)
    W/EntropyService(  761):        at java.io.FileInputStream.<init>(FileInputStream.java:134)
    W/EntropyService(  761):        at com.android.server.RandomBlock.fromFile(RandomBlock.java:45)
    W/EntropyService(  761):        at com.android.server.EntropyService.loadInitialEntropy(EntropyService.java:99)
    W/EntropyService(  761):        at com.android.server.EntropyService.<init>(EntropyService.java:86)
    W/EntropyService(  761):        at com.android.server.EntropyService.<init>(EntropyService.java:76)
    W/EntropyService(  761):        at com.android.server.ServerThread.run(SystemServer.java:109)
    I/sysproc (  761): System server: entering thread pool.也就是在这个函数中:
    private void loadInitialEntropy() {
            try {
                RandomBlock.fromFile(entropyFile).toFile(randomDevice);
            } catch (IOException e) {
                Slog.w(TAG, "unable to load initial entropy (first boot?)", e);
            }
        }
    在catch中做你想做的就行了。
    注意这是android起的第一个服务,如果你做的处理比较复杂,要用到android的其他服务,还是建议在此处只设置个标志(比如创建一个临时文件),放到之后再处理