package com.kenshin.hellocommand;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class HelloCommand extends Activity {
    /** Called when the activity is first created. */
        private TextView tv;
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView)findViewById(R.id.tv01);
        
        
        try {
                execCommand("./data/kenshin/x.sh");   
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } 
    } 
   
    public void execCommand(String command) throws IOException {        // start the ls command running
            //String[] args =  new String[]{"sh", "-c", command};
        Runtime runtime = Runtime.getRuntime();  
        Process proc = runtime.exec(command);        //这句话就是shell与高级语言间的调用
                                                     //如果有参数的话可以用另外一个被重载的exec方法        //实际上这样执行时启动了一个子进程,它没有父进程的控制台
        //也就看不到输出,所以我们需要用输出流来得到shell执行后的输出
        InputStream inputstream = proc.getInputStream();
        InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
        BufferedReader bufferedreader = new BufferedReader(inputstreamreader);        // read the ls output        String line = "";
        StringBuilder sb = new StringBuilder(line);
        while ((line = bufferedreader.readLine()) != null) {
            //System.out.println(line);
                sb.append(line);
                sb.append('\n');
        }
        
        tv.setText(sb.toString());
 
        //使用exec执行不会等执行成功以后才返回,它会立即返回
        //所以在某些情况下是很要命的(比如复制文件的时候)
        //使用wairFor()可以等待命令执行完成以后才返回
        try {
            if (proc.waitFor() != 0) {
                System.err.println("exit value = " + proc.exitValue());
            } 
        }
        catch (InterruptedException e) {  
            System.err.println(e);
        }
    }
}以前写的用iptable操作网卡芯片时候的一个测试程序
你要是写好脚本了的话可以用
Runtime runtime = Runtime.getRuntime();  
Process proc = runtime.exec(command); 
来执行这个脚本,不过里面有些权限问题,有的命令需要root,而应用程序一般都是没有root权限的,很麻烦,这个和具体的机器有关

解决方案 »

  1.   

    话说我在1.5SDK里面没有找到你说的应用呢
      

  2.   


    对,如何在应用程序里面加入root权限啊,这个问题很困扰啊
      

  3.   

    目前来说,发布出来的设备应用是不可能获取root权限的。
      

  4.   

    android里都是通过Intent调用其它程序的...
      

  5.   

    1。SDK1.5里面有3G拨号程序吗?我们咋都是自己开发的呢?
    2。如果楼主有源代码,自己做系统的话,不担心得不到root权限,你可以注册服务去完成root用户的工作。
    3。能用shell调用成功,只要封装这些命令就好了,自己写个APK吧,我们也是这么做的。
      

  6.   

    3G? 所说的3G难道指的是TDCDMA?WCDMA和CDMA2000可以直接拨号的啊。
      

  7.   


    小弟对android的应用开发属于幼儿园水平,请大侠能不能把这个注册服务的过程讲的详细一点呢,谢谢
      

  8.   


    服务有两种,一种是native service,在c/c++层运行,可以在init.rc里创建。还有一种是Android service,在系统上层开发,很多组建都用到这种服务,建立过程也有很多资料的,楼主可以查查,如果是一批命令就可以搞定,建议选择第一种,写个sh注册成服务,以root权限去运行,然后用java去调用这个sh。
      

  9.   

    楼主可以分享下在Android2.1下怎么连3g网络吗?感激不尽......
      

  10.   

    用socket进行通信,通过framework与ril通信,再就是一些特定脚本的调用。