如何将点击事件转发到启动器应用程序?
How to forward click event to Launcher app?
我有一个以编程方式放置在主屏幕上的小部件,我使用户可以将其拖动到他希望的位置。我在视图中添加了一个 OnTouchListener 以获取运动事件(这样我下次就可以记住屏幕上的视图位置),无论我在主屏幕上单击哪里,它都会触发,即使它在我的视图之外。
我想要实现的是将 MotionEvent.ACTION_UP 转发到 Launcher 应用程序,这样,如果用户单击某个应用程序图标,该应用程序就会启动。或者,在我的视图之外单击时不接收此事件。这是我所做的:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflatedViewWidget = inflater.inflate(R.layout.mtc_appwidget, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
0,
PixelFormat.TRANSLUCENT);
final WindowManager wm = (WindowManager) context.getSystemService(WINDOW_SERVICE);
wm.addView(inflatedViewWidget, params);
OnTouchListener:
inflatedViewWidget.setClickable(true);
inflatedViewWidget.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_UP:
//how to forward event to Launcher app?
break;
AFAIK,不允许在另一个应用程序中点击,这将允许覆盖应用程序让您点击支付按钮,例如,您需要 root 或调试功能。
所以诀窍是玩 window 尺寸。
您的小部件 window 大小和位置应始终与可点击区域匹配。
您可以使用 WindowManager 上的 updateViewLayout method 执行此操作。
一个很好的例子可以在这里找到:
https://medium.com/@kevalpatel2106/create-chat-heads-like-facebook-messenger-32f7f1a62064
我有一个以编程方式放置在主屏幕上的小部件,我使用户可以将其拖动到他希望的位置。我在视图中添加了一个 OnTouchListener 以获取运动事件(这样我下次就可以记住屏幕上的视图位置),无论我在主屏幕上单击哪里,它都会触发,即使它在我的视图之外。
我想要实现的是将 MotionEvent.ACTION_UP 转发到 Launcher 应用程序,这样,如果用户单击某个应用程序图标,该应用程序就会启动。或者,在我的视图之外单击时不接收此事件。这是我所做的:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflatedViewWidget = inflater.inflate(R.layout.mtc_appwidget, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
0,
PixelFormat.TRANSLUCENT);
final WindowManager wm = (WindowManager) context.getSystemService(WINDOW_SERVICE);
wm.addView(inflatedViewWidget, params);
OnTouchListener:
inflatedViewWidget.setClickable(true);
inflatedViewWidget.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_UP:
//how to forward event to Launcher app?
break;
AFAIK,不允许在另一个应用程序中点击,这将允许覆盖应用程序让您点击支付按钮,例如,您需要 root 或调试功能。
所以诀窍是玩 window 尺寸。 您的小部件 window 大小和位置应始终与可点击区域匹配。 您可以使用 WindowManager 上的 updateViewLayout method 执行此操作。
一个很好的例子可以在这里找到: https://medium.com/@kevalpatel2106/create-chat-heads-like-facebook-messenger-32f7f1a62064