通过代码在Android中调用sendevent


    adb shell sendevent /dev/input/event0 3 0 45
    adb shell sendevent /dev/input/event0 3 1 784
    adb shell sendevent /dev/input/event0 1 330 1
    adb shell sendevent /dev/input/event0 0 0 0
    adb shell sendevent /dev/input/event0 1 330 0
    adb shell sendevent /dev/input/event0 0 0 0

有什么方法可以通过Android代码调用sendevent?当我从Shell执行上面的命令时,我能够在模拟器中生成单击事件。是否可以从Android代码产生相同的效果?任何人请帮助我。

" sendevent"命令单击(或触摸)事件需要" root"或" su"权限。

我试图在这个问题中解决相同的问题,但是我找不到任何使用SDK工具以这种方式或任何其他方式模拟触摸的解决方案。

但是,还有另一种模拟触摸的方法。

我自己工作下一个工作(应用程序签名并作为系统应用程序运行):

Thread thread = new Thread(){
@Override
public void run(){
    try {
        this.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Instrumentation m_Instrumentation = new Instrumentation();
        m_Instrumentation.sendPointerSync(MotionEvent.obtain(
                SystemClock.uptimeMillis(),
                SystemClock.uptimeMillis(),
            MotionEvent.ACTION_DOWN,posx, posy, 0));
    m_Instrumentation.sendPointerSync(MotionEvent.obtain(
            SystemClock.uptimeMillis(),
            SystemClock.uptimeMillis(),
            MotionEvent.ACTION_UP,posx, posy, 0));
     }
};
thread.start();

我不知道要把它放在哪里,但是如果有人在使用首先发布的方法来获取'sendevent'代码在IC上工作的问题,我已经弄清楚了如何做它。不过,它确实需要SU访问。至少对我的问题是这个。

我将在下面发布代码,然后说明每个部分。

当您进行" getevent"以在触摸板上获取触摸事件的十六进制代码(Mine as/dev/event1)时,它会吐出一堆数据,这些数据在从十六进制转换为DEC后将看起来像这样。

第一组是7行,下一组是一个单触摸事件的9行。为什么?没有线索。语法是此(设备)(1、3或0,不理解)(值,这可能意味着很多。58在我的情况下是我设备的标识符,53和54表示坐标是值(值)(值)(值),等)

sendevent /dev/input/event1    3    58   255 #means '3, variable 58 is 255'
sendevent /dev/input/event1    3    53   534 #'3, variable 53 (x axis) is 534
sendevent /dev/input/event1    3    54   321 #'3, variable 54 (y axis) is 534
sendevent /dev/input/event1    3    48     8 #'3, variable 48 (pressure maybe) is 8
sendevent /dev/input/event1    0     2     0 #i think the 0,2,0 means 'finger down or up
sendevent /dev/input/event1    1   330     1 #this, followed by 0,0,0 means 'end of event'
sendevent /dev/input/event1    0     0     0

与所有这些相同,接受这是事件的另一端,如果第一部分意味着#'他放下手指'这意味着'他拿起它。

sendevent /dev/input/event1    3    58     0
sendevent /dev/input/event1    3    53   534
sendevent /dev/input/event1    3    54   321
sendevent /dev/input/event1    3    48     8
sendevent /dev/input/event1    0     2     0 
sendevent /dev/input/event1    0     0     0
sendevent /dev/input/event1    1   330     0
sendevent /dev/input/event1    0     2     0
sendevent /dev/input/event1    0     0     0

乍一看,这似乎是我出错的两个不同的触摸事件。实际上,这是"呼叫和接听情况类型"。此代码将产生一个触摸事件。顺便说一下,我使用shell脚本和smanager来获取此功能,而不必自己破译十六进制数据,它被称为" sendeventgetevent.sh" google it。

我很难解释,但是以下代码(如果您是根)将在4.0.4 IC中提供的坐标上产生一个触摸事件。当然,您必须对其进行调整以使其正确。下载sendeventgetevent.sh,使用Smanager之类的脚本管理器运行它并摇滚。

$su
sendevent /dev/input/event1    3    58   255;
sendevent /dev/input/event1    3    53   534;
sendevent /dev/input/event1    3    54   321;
sendevent /dev/input/event1    3    48     8;
sendevent /dev/input/event1    0     2     0;
sendevent /dev/input/event1    1   330     1;
sendevent /dev/input/event1    0     0     0;
sendevent /dev/input/event1    3    58     0;
sendevent /dev/input/event1    3    53   534;
sendevent /dev/input/event1    3    54   321;
sendevent /dev/input/event1    3    48     8;
sendevent /dev/input/event1    0     2     0;
sendevent /dev/input/event1    0     0     0;
sendevent /dev/input/event1    1   330     0;
sendevent /dev/input/event1    0     2     0;
sendevent /dev/input/event1    0     0     0;

您应该能够通过runtime.exec()方法发布同一shell命令:http://developer.android.com/reference/java/lang/runtime.html

相关内容

  • 没有找到相关文章

最新更新