禁用主页按钮 - Android

时间:2015-03-19 18:18:47

标签: android

我正在使用VOIP开发应用程序。在拨打电话时,我不希望用户进入主屏幕。我通过覆盖onbackpressed方法禁用了后退按钮的单击。但我无法弄清楚如何禁用主页按钮。

我试过了

    public void onAttachedToWindow()
    {  
         this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
         super.onAttachedToWindow();  
    }

但它引发了我的异常。我希望代码能够在android的所有版本中运行。

提前致谢。

2 个答案:

答案 0 :(得分:2)

实际上你也不能这样做,就像电源按钮一样。系统按钮是用户必须始终具有访问权限的系统按钮,与应用程序无关。想象一下,您的应用程序将卡住(滞后)或丢失互联网连接。整个设备将被阻止,因为用户无法返回主菜单。用户的唯一方法 - 是断电设备。这是Android系统架构禁用的。即使默认电话和voip应用程序不这样做,也尝试遵循此规则。 另外,meny供应商通过硬件实现了不同的按钮,因此该按钮具有不同的行为。 至于替代方案,您可以将“活动”设置为全屏,并在拨打电话时显示用户警告消息,而不是关闭您的应用。希望它有所帮助。

答案 1 :(得分:0)

有可能,但是您的应用必须使用系统密钥签名。我反编译了一个向导应用程序,并找到了一个示例代码,该示例禁用了主页按钮。我在向导应用程序中使用了此代码,但不能保证它会在任何地方都有效。我在带有Android 5、6和7的机顶盒上检查了此代码。

    private void disableHomeButton(Context context){
    ContentResolver contentResolver = context.getContentResolver();
    try {
        if (Build.VERSION.SDK_INT < 17) {
            Settings.System.putInt(contentResolver, Settings.System.DEVICE_PROVISIONED, 0);
        } else {
            Settings.Global.putInt(contentResolver, Settings.Global.DEVICE_PROVISIONED, 0);
        }
        Settings.Secure.putInt(contentResolver, Settings.Secure.USER_SETUP_COMPLETE, 0);
    }
    catch(SecurityException e){

    }
}

private void enableHomeButton(Context context){
    ContentResolver contentResolver = context.getContentResolver();
    try {
        if (Build.VERSION.SDK_INT < 17) {
            Settings.System.putInt(contentResolver, Settings.System.DEVICE_PROVISIONED, 1);
        } else {
            Settings.Global.putInt(contentResolver, Settings.Global.DEVICE_PROVISIONED, 1);
        }
        Settings.Secure.putInt(contentResolver, Settings.Secure.USER_SETUP_COMPLETE, 1);
    }
    catch(SecurityException e){

    }
}

AndroidManifest.xml

<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"
package="tv.test.wizard"
android:sharedUserId="android.uid.system">

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />


....

相关问题