gpt4 book ai didi

android - 使用 OverlayView 发送触摸事件

转载 作者:行者123 更新时间:2023-11-30 03:48:47 25 4
gpt4 key购买 nike

我正在部署一个使用 OverlayView 创建光标的应用程序。我可以在屏幕上和我的应用程序(服务)之外移动它。

但是现在我想实现触摸事件。我在服务中运行光标,所以我仍然可以在菜单或任何地方移动它。但我不知道如何点击。

因此,一旦我在我的应用程序之外,如果此服务获得点击事件(以编程方式或远程方式),我想在我光标下的 View 上创建一个触摸事件。

知道如何获取 View 或如何发送系统触摸事件吗?

这是我控制和绘制光标的方式:

class OverlayView extends ViewGroup {
private Paint mLoadPaint;
boolean mShowCursor;

Bitmap cursor;
public int x = 0,y = 0;

public void Update(int nx, int ny) {
x = nx; y = ny;
}
public void ShowCursor(boolean status) {
mShowCursor = status;
}
public boolean isCursorShown() {
return mShowCursor;
}

public OverlayView(Context context) {
super(context);
cursor = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
mLoadPaint = new Paint();
mLoadPaint.setAntiAlias(true);
mLoadPaint.setTextSize(10);
mLoadPaint.setARGB(255, 255, 0, 0);
}


@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//canvas.drawText("Hello World", 0, 0, mLoadPaint);
if (mShowCursor) canvas.drawBitmap(cursor,x,y,null);
}

@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
}

@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}

谢谢

最佳答案

通常的方法是使用 Instrumentation.sendPointerSync(motionEvent);,它使用权限:

<uses-permission android:name="android.permission.INJECT_EVENTS">
</uses-permission>

可是……要获得 INJECT_EVENTS 权限,您的应用必须使用与系统签名相同的签名进行签名。 (运行应用程序的设备的平台 key ...)例如:如果你想在三星设备上运行你的应用程序,你必须使用三星 key 签署你的应用程序......只有构造函数才能做到这一点......(对不起)

总而言之,您的应用程序只能在自身内部注入(inject)事件。(否则这将是一场安全噩梦,想象一下允许用户控制您的手机的 apk ...)

编辑:如果您有 key (例如,如果您构建自己的设备,拥有 ROM),您应该使用 signapk.jar(Android 平台源包中包含的工具)对 apk 进行签名:

java -jar signapk.jar certificate.pem key.pk8 your-app.apk your-signed-app.apk

关于android - 使用 OverlayView 发送触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14479882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com