手机开发时,有时候,需要一个数据,在手机恢复出厂设置时,不删除,保持原来的值,这个如何处理呢?
如果你是在mtk平台下(mtk6572),这有一个解决方案:
(1)mediatek/config/hongyu72_wet_jb3/init.project.rc
on fs
# for multi-logo (emmc)
chown system system /dev/logo
chown system system /dev/block/mmcblk0
chown system system /sys/class/BOOT/BOOT/boot/logo_mode
chmod 0644 /dev/logo
chmod 0664 /dev/block/mmcblk0
chmod 7777 /sys/class/BOOT/BOOT/boot/logo_mode
on post-fs-data
(2)数据读写api:
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;
static String SALE_SAT_FILE = "/sys/class/BOOT/BOOT/boot/logo_mode";
public boolean setSaleStatCompletedFlag() { try { BufferedReader in = new BufferedReader(new FileReader(SALE_SAT_FILE)); String line = null; FileWriter fw = new FileWriter(SALE_SAT_FILE); fw.write("yes", 0, "yes".length()); fw.flush(); // rewrite check line = in.readLine(); if (line == null || (line != null && !line.equals("yes"))) { fw.write("yes", 0, "yes".length()); fw.flush(); } fw.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } return true; } private static int getsalesat() { // TODO Auto-generated method stub try { FileReader fr = new FileReader(SALE_SAT_FILE); BufferedReader br = new BufferedReader(fr); try { String line = br.readLine(); if(line.equals("yes")){ br.close(); fr.close(); return 1; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); try { br.close(); fr.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return 0; } return 0; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return 0; } return 0; } public static boolean isSaleStatCompletedFlag() { if(getsalesat() == 1){ Log.v("LIUJIANFANG", "isSaleStatCompletedFlag yes"); return true; } return false; }
(3)其实,这个方法主要是参考settings模块,
packages/apps/settings/src/com/android/settings/testingSettingsBroadcastReceiver.java
void writeBootLogo(final Context context, String mode) { try { BufferedReader in = new BufferedReader(new FileReader( "sys/class/BOOT/BOOT/boot/logo_mode")); String line = null; FileWriter fw = new FileWriter("sys/class/BOOT/BOOT/boot/logo_mode"); fw.write(mode, 0, mode.length()); fw.flush(); // rewrite check line = in.readLine(); if (line == null || (line != null && !line.equals(mode))) { fw.write(mode, 0, mode.length()); fw.flush(); } fw.close(); in.close(); (new Handler()).postDelayed(new Runnable() { public void run() { PowerManager pm = (PowerManager) context .getSystemService("power"); pm.reboot(null); } }, 1000); } catch (Exception e) { Log.e("FactoryMode", "e---------->>" + e.getMessage()); } }