2016-08-01 173 views
-1

我正在开发android studio中的锁定屏幕应用程序。我知道我们不能禁用HOME按钮。但是在Play商店中有很多锁屏应用程序。他们如何做到这一点?当我在这些应用程序中按Home键时,什么也没有发生键入keyguard已被弃用,并且也是键锁。请告诉我如何让主页按钮不做任何事或在同一屏幕上。现在,我不想让它成为主屏幕,因为它可以让用户选择在主屏幕之间进行选择,而我正在开发一个锁屏应用程序,所以如果这是唯一的解决方案,那么告诉我如何将我的屏幕制作为主屏幕编程。请给出正确的答案。在android中修改锁定屏幕的主页按钮行为

+0

试试这个http://stackoverflow.com/a/10025904/5515371 –

+0

贯彻'的onkeydown()'方法,赶上按下按钮那里。 – Shark

+0

谢谢@MujammilAhamed,但我所说的是android现在已经改变了。我的意思是Keylocker不在那里,键盘不在那里,TYPE_KEYGUARD也不在那里。所以,请参考我今天的代码。 –

回答

1

经过大量的搜索谷歌。我终于找到了解决方案。我在GitHub上找到它。如果有人感兴趣。只需复制以下课程:

your package name; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.MotionEvent; 
import android.view.WindowManager; 
import android.widget.FrameLayout; 
import com.amigo.hammad.screenlock7292016.R; 

import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 

public class HomeKeyLocker { 
private OverlayDialog mOverlayDialog; 

public void lock(Activity activity) { 
    if (mOverlayDialog == null) { 
     mOverlayDialog = new OverlayDialog(activity); 
     mOverlayDialog.show(); 
    } 
} 

public void unlock() { 
    if (mOverlayDialog != null) { 
     mOverlayDialog.dismiss(); 
     mOverlayDialog = null; 
    } 
} 

private static class OverlayDialog extends AlertDialog { 

    public OverlayDialog(Activity activity) { 
     super(activity, R.style.AppTheme); 
     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.type = TYPE_SYSTEM_ERROR; 
     params.dimAmount = 0.0F; // transparent 
     params.width = 0; 
     params.height = 0; 
     params.gravity = Gravity.BOTTOM; 
     getWindow().setAttributes(params); 
     getWindow().setFlags(FLAG_SHOW_WHEN_LOCKED | FLAG_NOT_TOUCH_MODAL, 0xffffff); 
     setOwnerActivity(activity); 
     setCancelable(false); 
    } 

    public final boolean dispatchTouchEvent(MotionEvent motionevent) { 
     return true; 
    } 

    protected final void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     FrameLayout framelayout = new FrameLayout(getContext()); 
     framelayout.setBackgroundColor(0); 
     setContentView(framelayout); 
    } 
} 
} 

您可能会在super(activity,R.style.AppTheme)上发现错误;这条线。你只需要给你的应用程序的主题。

然后你需要在锁屏的onCreate方法中创建一个对象。并调用锁定功能。 e.g:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Object of Class HomeKeyLocker. 
    mHomeKeyLocker = new HomeKeyLocker(); 
    setContentView(R.layout.yourActivityLayoutName); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    // Calling Function in Class HomeKeyLocker to Block Home Button on this Activity. 
    mHomeKeyLocker.lock(this); 
} 
1

您需要覆盖您的活动OnKeyDown,正如Shark所说。 只需将&粘贴下面的代码复制到您的活动。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 

     if((keyCode==KeyEvent.KEYCODE_HOME) 
     { 
      // *** DO YOUR STUFF HERE *** 
      return true; 
     } 
      else 
      return super.onKeyDown(keyCode, event); 
    } 

它会处理点击主页按钮。