Android事件小结

来源:互联网 发布:医用统计软件 编辑:程序博客网 时间:2024/06/08 03:49

1、基本事件

ACTION_DOWN
ACTION_MOVE
ACTION_UP

Event Source
Event
Event Listener

2、事件类型

基于监听
基于回调

3、三个函数

public boolean dispatchTouchEvent(MotionEvent ev)
public boolean onInterceptTouchEvent(MotionEvent ev)//View没有此方法
public boolean onTouchEvent(MotionEvent event)

4、布局结构

View
FrameLayout ViewGroup
            LinearLayout RelativeLayout AbsoluteLayout
            TableLayout

5、顺序

Activity->ViewGroup->View//只有此三类可处理事件

6、模拟事件

adb shell
su


getevent
sendevent
input keyevent 3
input text "hi"
input tap 100 200
input swipe 100 200 300 200


执行命令
private void execCmd(String cmd) {
        OutputStream os = null;
        DataOutputStream dos = null;
        try {
            Process process = Runtime.getRuntime().exec("su");
            os = process.getOutputStream();
            dos = new DataOutputStream(os);
            dos.writeBytes(cmd);
            dos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (dos != null)
                    dos.close();
                if (os != null)
                    os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


/**
* github的开源类

*/

package com.study.eventstudy;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.List;/** * ShellUtils * <ul> * <strong>Check root</strong> * <li>{@link ShellUtils#checkRootPermission()}</li> * </ul> * <ul> * <strong>Execte command</strong> * <li>{@link ShellUtils#execCommand(String, boolean)}</li> * <li>{@link ShellUtils#execCommand(String, boolean, boolean)}</li> * <li>{@link ShellUtils#execCommand(List, boolean)}</li> * <li>{@link ShellUtils#execCommand(List, boolean, boolean)}</li> * <li>{@link ShellUtils#execCommand(String[], boolean)}</li> * <li>{@link ShellUtils#execCommand(String[], boolean, boolean)}</li> * </ul> * * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-5-16 */public class ShellUtils {    public static final String COMMAND_SU = "su";    public static final String COMMAND_SH = "sh";    public static final String COMMAND_EXIT = "exit\n";    public static final String COMMAND_LINE_END = "\n";    private ShellUtils() {        throw new AssertionError();    }    /**     * check whether has root permission     *     * @return     */    public static boolean checkRootPermission() {        return execCommand("echo root", true, false).result == 0;    }    /**     * execute shell command, default return result msg     *     * @param command command     * @param isRoot  whether need to run with root     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(String command, boolean isRoot) {        return execCommand(new String[]{command}, isRoot, true);    }    /**     * execute shell commands, default return result msg     *     * @param commands command list     * @param isRoot   whether need to run with root     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(List<String> commands, boolean isRoot) {        return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, true);    }    /**     * execute shell commands, default return result msg     *     * @param commands command array     * @param isRoot   whether need to run with root     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(String[] commands, boolean isRoot) {        return execCommand(commands, isRoot, true);    }    /**     * execute shell command     *     * @param command         command     * @param isRoot          whether need to run with root     * @param isNeedResultMsg whether need result msg     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(String command, boolean isRoot, boolean isNeedResultMsg) {        return execCommand(new String[]{command}, isRoot, isNeedResultMsg);    }    /**     * execute shell commands     *     * @param commands        command list     * @param isRoot          whether need to run with root     * @param isNeedResultMsg whether need result msg     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(List<String> commands, boolean isRoot, boolean isNeedResultMsg) {        return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, isNeedResultMsg);    }    /**     * execute shell commands     *     * @param commands        command array     * @param isRoot          whether need to run with root     * @param isNeedResultMsg whether need result msg     * @return <ul>     * <li>if isNeedResultMsg is false, {@link CommandResult#successMsg} is null and     * {@link CommandResult#errorMsg} is null.</li>     * <li>if {@link CommandResult#result} is -1, there maybe some excepiton.</li>     * </ul>     */    public static CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) {        int result = -1;        if (commands == null || commands.length == 0) {            return new CommandResult(result, null, null);        }        Process process = null;        BufferedReader successResult = null;        BufferedReader errorResult = null;        StringBuilder successMsg = null;        StringBuilder errorMsg = null;        DataOutputStream os = null;        try {            process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH);            os = new DataOutputStream(process.getOutputStream());            for (String command : commands) {                if (command == null) {                    continue;                }                // donnot use os.writeBytes(commmand), avoid chinese charset error                os.write(command.getBytes());                os.writeBytes(COMMAND_LINE_END);                os.flush();            }            os.writeBytes(COMMAND_EXIT);            os.flush();            result = process.waitFor();            // get command result            if (isNeedResultMsg) {                successMsg = new StringBuilder();                errorMsg = new StringBuilder();                successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));                errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));                String s;                while ((s = successResult.readLine()) != null) {                    successMsg.append(s);                }                while ((s = errorResult.readLine()) != null) {                    errorMsg.append(s);                }            }        } catch (IOException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (os != null) {                    os.close();                }                if (successResult != null) {                    successResult.close();                }                if (errorResult != null) {                    errorResult.close();                }            } catch (IOException e) {                e.printStackTrace();            }            if (process != null) {                process.destroy();            }        }        return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null                : errorMsg.toString());    }    /**     * result of command     * <ul>     * <li>{@link CommandResult#result} means result of command, 0 means normal, else means error, same to excute in     * linux shell</li>     * <li>{@link CommandResult#successMsg} means success message of command result</li>     * <li>{@link CommandResult#errorMsg} means error message of command result</li>     * </ul>     *     * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-5-16     */    public static class CommandResult {        /**         * result of command         **/        public int result;        /**         * success message of command result         **/        public String successMsg;        /**         * error message of command result         **/        public String errorMsg;        public CommandResult(int result) {            this.result = result;        }        public CommandResult(int result, String successMsg, String errorMsg) {            this.result = result;            this.successMsg = successMsg;            this.errorMsg = errorMsg;        }    }}



0 0
原创粉丝点击