android不调用JNI解析挂载点对应设备

作者:Chilau 发布于:2014-2-4 11:24 分类:android

有时候在项目中会解析一个目录是由哪个设备挂载的,需要调用JNI或者exec出mounts再来解析。这样的坏处就是不一定能保持良好的兼容,输出内容也不一定一致。通过读取并分析/proc/mounts就成为了一个更好的办法。
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public class MountPoint {
	List<String[]> mounts=new ArrayList<String[]>();
	public MountPoint(){
		try{
			File procf=null;
			procf=new File("/proc/mounts");
			if(!procf.canRead())return;
			FileInputStream procfm=null;
			procfm=new FileInputStream(procf);
			DataInputStream tmp=new DataInputStream(procfm);
			try{
				int q=0;
				while(q<30){
					String[] thistmp=tmp.readLine().split(" ",0);
					if(thistmp.length>3){
						mounts.add(thistmp);
					}
					q++;
				}
			}
			catch(EOFException ingored){
				
			}
		}catch(Exception ex){
			return;
		}
	}
	public String FindPoint(String root){
		for(int x=0;x<mounts.size();x++){
			String[] thistmp=mounts.get(x);
			if(thistmp[1].trim().equals(root.trim())){
				return thistmp[0]; 
			}
		}
		return "";
	}
}

调用示例:


MountPoint mt=new MountPoint();
mt.FindPoint("/system");//找到输出类似emmc@android或/dev/block/mmcblk0px这样的结果。未找到返回空。




« Android联网错误(getaddrinfo: return error = 0x8)解决 | Android上发送已安装软件原理及其实现»

发表评论: