2016-04-23 5 views
2

Я хочу обнаружить нажатие кнопки возврата на службе. Я только что пробовал этот код, но он не показывал мне никакого журнала. Может ли кто-нибудь объяснить мне, почему? И что мне делать, чтобы заставить его работать?Обнаружение нажатия кнопки возврата

Вся идея сделать это было взято из этого учебника 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; 
    } 
} 

ответ

1

Ваша служба не View, встраивании View.OnKeyListener не обеспечивает нужную функциональность.

Служба предназначена для «деятельности без интерфейса», которая работает на фоне вашего приложения. Вы можете использовать Binders/Broadcasts для связи с вашей службой, но взаимодействие с пользовательским интерфейсом лучше всего оставить для Activity/Fragments.

Приложение:
Я думаю, вы пытаетесь создать наложение, как в ссылке, которую вы разместили в комментарии. Это учебное пособие с 2013 года, поэтому все изменилось.

В целом, система Android обескураживает приложение beheaviour, как описанный ниже метод. Такое кодирование входит в категорию Lockscreen/Kiosk-App, которое считается вредоносным ПО.

Если вы хотите выполнить небольшое меню в своем приложении, вы можете сделать это отлично, не используя такую ​​услугу. Вне вашего приложения у вас все еще есть варианты использования виджетов, которые более удобны для пользователя, чем hardcoding что-то на экране.

+0

@ r% c3% bcdiger Я пытался сделать что-то вроде этого http://www.kpbird.com/2013/03/android-detect-global-touch-event.html –

+0

отредактировал мой ответ в соответствии с вашими ссылка –

Смежные вопросы