我只是想知道有背景服务的罐子是否在所有活动中都有触摸屏事件的坐标。
就像那样
*final TextView textView = (TextView)findViewById(R.id.textView);
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : " +String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
return true;}
但默认情况下没有任何视图
感谢
答案 0 :(得分:1)
我只是想知道是否可以 有后台服务了 触摸屏事件的坐标 在所有活动中。
不,抱歉。您的活动可以将有关触摸事件的信息传递给服务,但服务无法直接接收触摸事件。
答案 1 :(得分:1)
对此问题可能有类似的想法:
让所有活动都具有发送触摸事件的相同逻辑。您可以拥有一个具有此逻辑的基本活动,您的所有活动都会延伸。
有一个顶视图,它将使用系统警报权限收集触摸事件。但是,不要忘记在需要时关闭保存它的活动,因为即使在隐藏应用程序之后它也会继续捕捉触摸事件。
这是一个在顶部设置视图的示例代码:
final WindowManager.LayoutParams param=new WindowManager.LayoutParams();
param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
final View view=findViewById(R.id.view1);
final ViewGroup parent=(ViewGroup)view.getParent();
parent.removeView(view);
param.format=PixelFormat.RGBA_8888;
param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
param.gravity=Gravity.TOP|Gravity.LEFT;
param.width=view.getLayoutParams().width;
param.height=view.getLayoutParams().height;
final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wmgr.addView(view,param);
// TODO handle overlapping title bar and/or action bar
// TODO you must add logic to remove the view
// TODO you must use a special permission to use this method :android.permission.SYSTEM_ALERT_WINDOW