1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 代码中获得系统分区

代码中获得系统分区

时间:2020-07-28 01:58:13

相关推荐

代码中获得系统分区

前言:在最近的工作中涉及到从u盘拷贝大量数据到车机,偶尔有失效的情况,后面发现是sdcard存储空间不足,因此想在代码中展示出当前系统分区.查看系统分区在adb中为adb shell df

我们用如下方法可执行任意的adb shell命令,在此仅用"df"举例
代码如下

private String[] doRuntimeCmmd(String command) {Log.d(TAG, "doRuntimeCmmd:" + command);Process process = null;BufferedReader mOutReader = null;BufferedReader mErrorReader = null;try {process = Runtime.getRuntime().exec(command);Log.d(TAG, "process exec: " + process);mOutReader = new BufferedReader(new InputStreamReader(process.getInputStream()));int mOutread;char[] outBuffer = new char[4096];StringBuffer output = new StringBuffer();while ((mOutread = mOutReader.read(outBuffer)) > 0) {output.append(outBuffer, 0, mOutread);} mErrorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));int mErrorread;char[] errorBuffer = new char[4096];StringBuffer error = new StringBuffer();while ((mErrorread = mErrorReader.read(errorBuffer)) > 0) {error.append(errorBuffer, 0, mErrorread);}process.waitFor();String[] mResult = { output.toString(), error.toString() };Log.d(TAG, command +" Result:" + mResult[0]);Log.d(TAG, command+ " Error:" + mResult[1]);return mResult;} catch (Exception e) {e.printStackTrace();String[] mResult = { "error", "error" };Log.d(TAG, command + " Result = " + mResult[0] + " Error = " + mResult[1]);return mResult;} finally {try {if (mOutReader != null) {mOutReader.close();}if (mErrorReader != null) {mErrorReader.close();}if (process != null) {Log.d(TAG, "process destroy: " + process);process.destroy();}} catch (IOException e) {e.printStackTrace();}}}

我们在代码中按如下使用

String[] runtimeCmmd = doRuntimeCmmd("df");MySortViewOfCMD textView = new MySortViewOfCMD(getActivity());textView.setCurrentString(runtimeCmmd[0]);

用此方法得到的文本结果,并不像adb命令行中格式化的,需要自定义控件

自定义view实现排版仅供参考

public class MySortViewOfCMD extends TextView {private String text;int lineCount = 0;private Paint paint = new Paint();private ArrayMap<Integer, String[]> charByMap;private int mWidth = 900;// pxprivate int mHeight = 660;private Scroller mScroller;private int lastPointX;private int lastPointY;public MySortViewOfCMD(Context context) {super(context);initPaint(context);}public MySortViewOfCMD(Context context, AttributeSet attrs) {super(context, attrs);initPaint(context);}private void initPaint(Context context) {paint.setColor(context.getResources().getColor(R.color.white));paint.setTextSize(TypedValue.applyDimension(PLEX_UNIT_SP,18, context.getResources().getDisplayMetrics()));mScroller = new Scroller(context);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = measureDimension(mWidth, widthMeasureSpec);int height = measureDimension(mHeight, heightMeasureSpec);setMeasuredDimension(width, height);}private int measureDimension(int defaultSize, int measureSpec) {int result = defaultSize;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);if (specMode == MeasureSpec.EXACTLY) {result = specSize;} else if (specMode == MeasureSpec.AT_MOST) {result = Math.min(defaultSize, specSize);} else {result = defaultSize;}return result;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);for (int i = 0; i < charByMap.size(); i++) {//绘制行String[] strings = charByMap.get(i);for (int j = 0; j < strings.length; j++) {//绘制列if (j == 1) {//针对第二列做特殊处理,防止与第一列重影canvas.drawText(strings[j], j * (mWidth / 3) + 60,i * 30 + 25, paint);continue;}canvas.drawText(strings[j], j * (mWidth / 3), i * 30 + 25,paint);}}}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:lastPointX = (int) event.getX();lastPointY = (int) event.getY();return true;case MotionEvent.ACTION_MOVE:int mXMove = (int) event.getX();int scrolledX = (int) (lastPointX - mXMove);if(getScrollX() + scrolledX < 0){//左边界scrollTo(0, 0);return true;}if (getScrollX() + getWidth() + scrolledX < (mWidth / 3) * 5)//小于右边界mScroller.startScroll(getScrollX(), 0,lastPointX - (int) event.getX(), 0, 200);invalidate();break;case MotionEvent.ACTION_UP:break;}return true;}/*** 平滑滚动 */@Overridepublic void computeScroll() {if (puteScrollOffset()) {scrollTo(mScroller.getCurrX(), mScroller.getCurrY());invalidate();}}public void setCurrentString(String text) {this.text = text;charByMap = saveCharByMap(text);invalidate();}/*** 根据传进来的string保存每一行的字符* * @param string* -显示的字符串 eg: file size use \n filedddd size use \n*/private ArrayMap<Integer, String[]> saveCharByMap(String string) {String[] lineString = string.split("\n");ArrayMap<Integer, String[]> charMap = new ArrayMap<Integer, String[]>();lineCount = lineString.length;for (int i = 0; i < lineCount; i++) {String[] charItem = lineString[i].split("\\s+");// 按空格切出字符charMap.put(i, charItem);}return charMap;}}

感谢android,感谢开源

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。