gpt4 book ai didi

Android:永远不会调用叠加按钮 onClick

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:00 24 4
gpt4 key购买 nike

我创建了一个运行服务的应用程序。该服务基本上有一个覆盖按钮,点击按钮会做一些事情。但是,每次我点击按钮,按钮后台的应用程序都会响应。有人可以帮忙吗?

我已经提到了 link .

这是我的代码:

服务代码:

public class HUD extends Service implements OnTouchListener{
Button mButton;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
String s;
s = "Hari";

return null;
}
@Override
public void onCreate() {
super.onCreate();
//mView = new HUDView(this);
mButton = new Button(this);
mButton.setText("Overlay button");
mButton.setOnTouchListener(this);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mButton, params);
}

@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(getBaseContext(),"onDestroy", Toast.LENGTH_LONG).show();
if(mButton != null)
{
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mButton);
mButton = null;
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(this,"Overlay button event", Toast.LENGTH_SHORT).show();
return false;
}
}

list 还具有以下权限:

我尝试将类型更改为

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,

现在,无论我点击哪里,都会调用触摸事件。有人可以帮助我吗?

最佳答案

问题是您正在使用 WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY。我认为自从某些 Android 4.x 以来它不再可用了。这是我实现叠加按钮的方式:

public class OverlayButton extends Service implements OnTouchListener {

Button mButton;
WindowManager wm;

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();

mButton = new Button(this);
mButton.setText("Overlay button");
mButton.setTextColor(Color.BLACK);
mButton.setOnTouchListener(this);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(150,
150, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT);

params.gravity = Gravity.LEFT | Gravity.CENTER;
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mButton, params);
}

@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(getBaseContext(), "onDestroy", Toast.LENGTH_LONG).show();
if (mButton != null) {
((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mButton);
mButton = null;
}
}

@Override
public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_UP) {
Log.d("OverlayButton onTouch", "touched the button");
stopSelf();
}
return true;
}
}

我所做的是,如果我触摸他,我还赋予了他再次消失的能力。

这是我让他出现的方式:

getActivity().startService(new Intent(getActivity().getBaseContext(), OverlayButton.class));

但是,如果您从 Activity 启动它,只需使用:

startService(new Intent(this, OverlayButton.class));

不要忘记在您的 list 中设置这些:

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

在标签里面也不要忘记:

<service android:name="OverlayButton" ></service>

关于Android:永远不会调用叠加按钮 onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812368/

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