Android shell command execute Demo

  1 package com.android.utils;
  2
  3
  4 import java.io.File;
  5
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10
 11 /**
 12  * 本类主要用于在Java层执行Linux shell命令,获取一些系统下的信息
 13  * 本例中的dmesg需要一些额外的权限才能使用
 14  * @author zengjf
 15  */
 16 public class ShellExecute {
 17     /**
 18      * 本函数用于执行Linux shell命令
 19      *
 20      * @param command                 shell命令,支持管道,重定向
 21      * @param directory               在指定目录下执行命令
 22      * @return                        返回shell命令执行结果
 23      * @throws IOException            抛出IOException
 24      */
 25     public static String execute ( String command, String directory )
 26             throws IOException {
 27
 28         // check the arguments
 29         if (null == command)
 30             return "";
 31
 32         if (command.trim().equals(""))
 33             return "";
 34
 35         if (null == directory || directory.trim().equals(""))
 36             directory = "/";
 37
 38         String result = "" ;
 39
 40         List<String> cmds = new ArrayList<String>();
 41         cmds.add("sh");
 42         cmds.add("-c");
 43         cmds.add(command);
 44
 45         try {
 46             ProcessBuilder builder = new ProcessBuilder(cmds);
 47
 48             if ( directory != null )
 49                 builder.directory ( new File ( directory ) ) ;
 50
 51             builder.redirectErrorStream (true) ;
 52             Process process = builder.start ( ) ;
 53
 54             //得到命令执行后的结果
 55             InputStream is = process.getInputStream ( ) ;
 56             byte[] buffer = new byte[1024] ;
 57             while ( is.read(buffer) != -1 )
 58                 result = result + new String (buffer) ;
 59
 60             is.close ( ) ;
 61         } catch ( Exception e ) {
 62             e.printStackTrace ( ) ;
 63         }
 64         return result.trim() ;
 65     }
 66
 67     /**
 68      * 本函数用于执行Linux shell命令,执行目录被指定为:"/"
 69      *
 70      * @param command                 shell命令,支持管道,重定向
 71      * @return                        返回shell命令执行结果
 72      * @throws IOException            抛出IOException
 73      */
 74     public static String execute (String command) throws IOException {
 75
 76         // check the arguments
 77         if (null == command)
 78             return "";
 79
 80         if (command.trim().equals(""))
 81             return "";
 82
 83         return execute(command, "/");
 84     }
 85
 86     /**
 87      * 本函数用于判断dmesg中是否存在pattern字符串,执行目录被指定为:"/"
 88      *
 89      * @param pattern         给grep匹配的字符串
 90      * @return                true:  dmesg中存在pattern中的字符串<br>
 91      *                        false:dmesg中不存在pattern中的字符串
 92      * @throws IOException    抛出IOException
 93      */
 94     public static boolean deviceExist(String pattern) throws IOException{
 95
 96         // check the arguments
 97         if (null == pattern)
 98             return false;
 99
100         if (pattern.trim().equals(""))
101             return false;
102
103         return execute("dmesg | grep " + pattern).length() > 0;
104     }
105 }
时间: 2024-08-08 09:33:19

Android shell command execute Demo的相关文章

I.MX6 Android shutdown shell command

/******************************************************************************* * I.MX6 Android shutdown shell command * 说明: * 想在I.MX6上执行shell关机命令,不过效果貌似不是很好,开关键多按两下又亮了. * * 2016-7-25 深圳 南山平山村 曾剑锋 ****************************************************

Android FragmentStatePageAdapter的使用Demo

上一篇写过FragmentPagerAdapter,这篇来介绍FragmentStatePagerAdapter,那么两者之间有何区别呢: FragmentPagerAdapter更多的用于少量界面的ViewPager,比如Tab.划过的fragment会保存在内存中,尽管已经划过.而FragmentStatePagerAdapter和ListView有点类似,会保存当前界面,以及下一个界面和上一个界面(如果有),最多保存3个,其他会被销毁掉. 如果想要更详细的了解,可以查看官网API,下面给出

如何解决Eclipse开发android程序的编译错误:com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0?

近日,升级了android的开发工具,发现它在Eclipse上运行程序的时候报如下的错误: Errors occurred during the build.   Errors running builder 'Android Package Builder' on project 'EX04_03'.   com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0 原因:个人电脑上装的JDK是1.7 解决办法

Android SQLite最简单demo实现(增删查改)

本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助. 参考博客:http://www.20864.com/201247/274.html 这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作. 以下是实现demo的步骤:

Android之ViewPager循环Demo

ViewPager是谷歌官方提供的兼容低版本安卓设备的软件包,里面包含了只有在安卓3.0以上可以使用的api.Viewpager现在也算是标配了,如果一个App没有用到ViewPager感觉还是比较罕见的,导航和页面菜单常用的功能,ViewPager与LisstView类似,ListView经常会用到BaseAdapter,ViewPager则继承的是PagerAdapter,关于简单的使用可以去官网可以http://developer.android.com/reference/android

Android java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor ver

java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor ver 解决办法: 把compile sdk version与Build tool version改成对应的. 之后在clean ,rebuild.

android语音朗读功能demo实现

简单的文本语音朗读功能实现 实现这个功能主要用一个类,是TextToSpeech,废话不都少,直接上代码.总的来说效果一般,短语的停顿节奏不是很好. 界面很简单,一个Button ,一个EditView,就不贴代码了 public class ActivityResumptionArticle extends BaseActivity{    private TextToSpeech mSpeech = null;   private Button btn = null;   private E

Android studio百度地图demo出现230错误,key校验失败

转自daoxiaomianzi原文 Android studio 百度地图demo出现230错误,key校验失败 使用AndroidStudio导入Baidu地图的as版的demo,引入后,发现没有key,于是到http://lbsyun.baidu.com/apiconsole/key,创建应用,申请key,但是把sha1和报名都输入后,将key复制到manifest.xml里,部署到手机上,提示: 验证出错,错误码:230,请AndroidManifest.xml文件中检查 kye 设置.

Makefile,Shell command,Shell Language 之间的联系

1. Makefile 首先要知道Makefile 是什么东西,Makefile 是一个指令文件,里面存储着自定义的命令(可以借助已有的命令创造而来)在不同的系统下对Makefile 的区别不一样,Linux/Unix系统中系统会先搜寻默认目录以及环境变量中路径中是否有Makefile 或 makefile(此类文件没有扩展名)但在Windows下是nmake Makefile文件中语法或用法: # 一些简单声明,变量的声明等 指令:for example  ----->       clean