跨进程屏幕点击:可以用
sendevent /dev/input/eventX 实现,前提手机已经root。
遇到的坑:
1:adb shell可以,但是code不行,有可能是因为eventX文件没有读写权限,请chmod 777 eventX。
2:执行adb没有权限,adb shell setenforce 0.
相关代码;
private void exceutecmd(String x,String y){
String envets = "sendevent /dev/input/event6 ";
String IDValue ="112";
String TouchaMajorValue ="4";
String PressValue[] ={"10","40","20","0"};
//不同手机如下值配置不同,getevent查看
String EnvAbs="X ",AbsID="XX ",AbsX ="XX ",AbsY="XX ",AbsTouchMajor="XX ",AbsPress ="XX ";
String sync =envets+"0 0 0";
{
exceutecmd(envets + EnvAbs + AbsID + IDValue);
exceutecmd(envets + EnvAbs + AbsX + x);
exceutecmd(envets + EnvAbs + AbsY + y);
exceutecmd(envets + EnvAbs + AbsTouchMajor + TouchaMajorValue);
for (int i = 0; i < PressValue.length; i++) {
exceutecmd(envets + EnvAbs + AbsPress + PressValue[i]);
exceutecmd(sync);
}
exceutecmd(envets + EnvAbs + AbsID + "-1");
exceutecmd(sync);
}
}
private void exceutecmd(String cmd){
try{
Runtime.getRuntime().exec(cmd);
Thread.sleep(10);
}catch(Exception e){ }
}
public void DisplayMyview(){
LayoutInflater inflator = (LayoutInflater)
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflator.inflate(R.layout.layout_toast, null);
if (FloatWindow.get() == null)
FloatWindow.setView(view)//网上写好的悬浮框简写。
Button button =view.findViewById(R.id.button1);
Button button2 =view.findViewById(R.id.button2);
Button button3 =view.findViewById(R.id.button3);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
init();
start();
}
});
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stop();
}
});
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
stop();
finish();
FloatWindow.get().hide();
}
});
}