2015-11-06 63 views
0

我想开我的应用程序后会自动禁用家庭和电源按钮,打在了应用程序退出按钮后启用它们。禁用home键编程

我已让我的应用程序启动器应用中实现了这一点,它的工作原理,直到杰利贝恩(高达4.1.2测试)。

但相同的应用程序不奇巧和棒棒糖版本解决。 我认为要使用Kiosk技术来禁用棒棒糖中的主页按钮。 参考https://sdgsystems.com/blog/implementing-kiosk-mode-android-part-3-android-lollipop, 它需要一个设备所有者应用程序,并且很少有步骤来实现它。

虽然我的应用程序是自动阻止home键的功能,它并没有解决。

我的问题是:

  • 是否有任何进程棒棒糖禁用home键?
  • 如何通过编程实现它?

如果信息亭是技术,那么如何使它适合我的要求? (寻找指导通过)

+0

的桌面应用方法不起作用?当你按下主页按钮android调用启动器显示,那应该不会改变 – Nanoc

+0

你确定,发射器方法在棒棒糖中工作吗? – user2625151

+0

您确定您已将您的应用设置为默认启动器吗? – m0skit0

回答

0

这是我建议的流程。创建设备所有者应用并通过NFC凹凸或adb获取设备所有权。将设备名称添加到设备所有者应用的setLockTaskPackage()中。

现在,在您要锁定设备的应用程序中,调用startLockTask()方法,并且设备将被锁定到此特定应用程序,直到您调用stopLockTask()。

您可以找到API的信息here

关于如何创建一个设备所有者的应用程序,并指导您可以参考Florent Dupont网站。

0

首先对于迟到的回答感到抱歉。第一件事是程序员真的不阻止主页按钮。他们仅使用技巧来隐藏锁定屏幕后面的主页按钮过程。

你怎么能这样做?简单。只需使用您的锁屏窗口作为窗口管理器屏幕,这就是为什么在按下回家后您的手机屏幕不会最小化。这是大多数成功锁定应用程序中使用的小技巧。

还有一件事是如何重叠手机窗口顶部系统状态栏。

为此您可以像这样使用代码,并且可以根据需要进行修改。

manager = ((WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)); 

localLayoutParams = new WindowManager.LayoutParams(); 
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 
localLayoutParams.gravity = Gravity.TOP;  

localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| 

//WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR | 
    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | 

     // this is to enable the notification to recieve touch events 
     //WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | 
     WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | 
     // Draws over status bar 
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 


//localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; 
localLayoutParams.height = (int) (50 *  getResources().getDisplayMetrics().scaledDensity); 
localLayoutParams.format = PixelFormat.TRANSPARENT; 

view = new customViewGroup(this); 

manager.addView(view, localLayoutParams); 

,创造customeVIewGroup类这样的..

public class customViewGroup extends ViewGroup { 

    public customViewGroup(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     Log.v("customViewGroup", "**********Intercepted"); 
     return true; 
    } 
}