我想检测按下服务中的后退按钮 。我刚试过这段代码,但它没有向我显示任何日志。有人可以解释一下为什么吗?我该怎么做才能让它发挥作用?
这样做的整个想法来自本教程http://www.kpbird.com/2013/03/android-detect-global-touch-event.html
public class MyService extends Service implements View.OnKeyListener{
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
LinearLayout touchLayout = new LinearLayout(this);
// set layout width 30 px and height is equal to full screen
LayoutParams lp = new LayoutParams(30, LayoutParams.MATCH_PARENT);
touchLayout.setLayoutParams(lp);
touchLayout.setBackgroundColor(Color.RED);
touchLayout.setOnKeyListener(this);
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// set layout parameter of window manager
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
30, // width of layout 30 px
WindowManager.LayoutParams.MATCH_PARENT, // height is equal to full screen
WindowManager.LayoutParams.TYPE_PHONE, // Type Phone, These are non-application windows providing user interaction with the phone (in particular incoming calls).
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // this window won't ever get key input focus
PixelFormat.TRANSLUCENT);
mParams.gravity = Gravity.LEFT | Gravity.TOP;
mWindowManager.addView(touchLayout, mParams);
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
Log.v("Point","KeyCode_Back");
return false;
}
return false;
}
}
答案 0 :(得分:1)
您的服务不是View,实现View.OnKeyListener无法提供您所需的功能。
服务旨在成为没有用户界面的活动"它在您的应用程序的后台运行。您可以使用Binders / Broadcasts与您的服务进行通信,但UI交互最好留给Activity / Fragments。
附件:
我想你正在尝试建立一个叠加层,就像你在评论中发布的链接一样。本教程是从2013年开始的,所以情况发生了变化。
一般情况下,Android系统会像下面描述的方法一样阻止App beheaviour。像这样编码,进入Lockscreen / Kiosk-App类别的行为,这被认为是恶意软件。
如果你想在你的应用程序中完成一个小的侧面菜单,你可以完全没有使用这样的服务。在您的应用程序之外,您仍然可以选择使用小部件,这些小部件比屏幕上的硬编码更加用户友好。