Android实战简易教程-第四十三枪(Shell Script 运行Command)

android系统运行于Dalvik VM中,有着与Linux雷士的Shell Command指令,可通过Runtime().getRuntime().exec()来运行指令。

下面我们就通过代码来实现这一功能,体验一下命令行。

1.activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/et_input"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_margin="4dp"
        android:hint="Input Command Lines" />

    <Button
        android:id="@+id/btn_run"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_input"
        android:text="Run" />

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:layout_below="@+id/btn_run"
        />

</RelativeLayout>
2.MainActivity.java:

package com.example.runcommand;

import java.io.DataInputStream;
import java.io.IOException;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
	private EditText mInputET;
	private TextView mResult;
	private Button mRun;
	private String input;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initViews();
	}

	private void initViews() {
		mInputET = (EditText) findViewById(R.id.et_input);
		mResult = (TextView) findViewById(R.id.tv_result);
		mRun = (Button) findViewById(R.id.btn_run);
		mRun.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				input = mInputET.getText().toString();
				if (!TextUtils.isEmpty(input)) {
					runRootCommand(input);
					mInputET.setText("");
					

				}
			}

		});

	}

	protected void runRootCommand(String command) {
		Process process = null;

		try {
			process = Runtime.getRuntime().exec(command);

			StringBuffer output = new StringBuffer();

			DataInputStream stdout = new DataInputStream(process.getInputStream());
			String line;

			while ((line = stdout.readLine()) != null) {
				output.append(line).append("\n");

			}

			process.waitFor();

			mResult.setText(output.toString());
		} catch (IOException e) {
			mResult.setText("权限不足或系统出错!");
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			process.destroy();
		}
	}

}
首先运行一下程序,输入ls -l看一下结果如下:

再次运行一下:

 am start -a android.intent.action.CALL -d tel:10086      可以跳转到拨号界面。

下面我们介绍一下常见的am 命令

打开一个网页: am start -a android.intent.action.VIEW -d  http://www.baidu.com (这里-d表示传入的data)

3. 打开音乐播放器:am start -a android.intent.action.MUSIC_PLAYER 或者

                                am start -n com.android.music/om.android.music.MusicBrowserActivity

4. 启动一个服务:  am startservice <服务名称>

    例如:am startservice -n com.android.music/com.android.music.MediaPlaybackService (这里-n表示组件)

    或者   am startservice -a com.smz.myservice (这里-a表示动作,就是你在Androidmanifest里定义的) 

5. 发送一个广播:  am broadcast -a <广播动作>

    例如: am broadcast -a com.smz.mybroadcast

 喜欢的朋友关注我,谢谢!




你可能感兴趣的:(linux,android,shell,command,dalvik)