Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将单击事件转发到Launcher应用程序?_Java_Android_Android Windowmanager - Fatal编程技术网

Java 如何将单击事件转发到Launcher应用程序?

Java 如何将单击事件转发到Launcher应用程序?,java,android,android-windowmanager,Java,Android,Android Windowmanager,我有一个程序化的小部件放在主屏幕上,我让用户可以把它拖到他想要的地方。我在视图中添加了一个OnTouchListener来获取运动事件(这样我下次可以记住屏幕上的视图位置),它在我单击主屏幕的任何位置都会触发,即使在我的视图之外 我想实现的是将MotionEvent.ACTION_转发到Launcher应用程序,这样,如果用户单击应用程序图标,该应用程序将启动。或者,在我的视图之外单击时不接收此事件。以下是我所做的: LayoutInflater inflater = (LayoutInfla

我有一个程序化的小部件放在主屏幕上,我让用户可以把它拖到他想要的地方。我在视图中添加了一个OnTouchListener来获取运动事件(这样我下次可以记住屏幕上的视图位置),它在我单击主屏幕的任何位置都会触发,即使在我的视图之外

我想实现的是将MotionEvent.ACTION_转发到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;

顺便说一句,不允许在另一个应用程序中单击,这将允许覆盖应用程序让您单击支付按钮。例如,您需要root或调试功能

所以诀窍是利用窗口大小。 小部件的窗口大小和位置应始终与可单击区域相匹配。 您可以使用WindowManager上的

这里可以找到一个很好的例子:

手动启动应用程序,而不是将事件转发到启动器应用程序,怎么样?看看这个答案:你是在暗示你已经创建了自定义的launcher应用程序UI,并在那里以编程方式放置小部件和其他应用程序图标吗?