0.前言:有的时候业务需要读写NVRAM里面的数据,比如读MAC地址或者自定义NVRAM节点然后读写操作其节点值(NVRAM里面的值恢复出厂设置后还存在)
1.实际在需要读写nvram的地方导入NVRAMUtils.java和NvRAMAgent.java文件(注意文件的包名与添加的路径要一致),然后用
NVRAMUtils.readNvRAMFile(NVRAM的路径名)和 writeNvRAMFile就可以进行读写操作了,且读写的是byte数组,实际可能需要再转换为string类型的数据
2.实际调试可以通过adb shell然后cd到具体的节点路径,然后通过cat和echo读写里面的值,然后也可以pull出那个文件通过相关的软件查看里面的值(实际保存的为byte类型,文件查看到的为16进制数据)
========================
NVRAMUtils.java
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.os.ServiceManager;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public static byte[] readNvRAMFile(String filename) {
IBinder binder = ServiceManager.getService("NvRAMAgent");
NvRAMAgent agent = NvRAMAgent.Stub.asInterface(binder);
byte[] buff = null;
try {
buff = agent.readFileByName(filename);
return buff;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void writeNvRAMFile(String filename,byte[] buff) {
IBinder binder = ServiceManager.getService("NvRAMAgent");
NvRAMAgent agent = NvRAMAgent.Stub.asInterface(binder);
try {
agent.writeFileByName(filename,buff);
Log.i("xiaozheng", "ready backupToBinRegionAll");
agent.backupToBinRegionAll();
} catch (Exception e) {
Log.i("xiaozheng", "writeNvRAMFile e="+e);
e.printStackTrace();
}
}
=======================
NvRAMAgent.java
import android.os.IBinder;
public interface NvRAMAgent extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */