是否可以禁用和#34;其他应用程序" Android中的按钮?

时间:2014-09-15 13:32:36

标签: android android-homebutton

我正在创建一个应用程序,它将由孩子们使用,因此客户希望我禁用任何退出方式。我设法阻止主页按钮,也回到按钮,但其他应用程序按钮呢?我可以隐藏所有向下按钮,但可以通过从下到上滑动来显示它们。

因此可以禁用其他应用程序" Android中的按钮,或以某种方式覆盖它的动作?

1 个答案:

答案 0 :(得分:0)

发布ICS即Android 4+,出于安全原因删除了HomeButton的覆盖,以便在应用程序被证明是恶意软件时启用用户退出。


以下是关于4.0以下设备上阻止主页按钮的文章 - Overriding Home Button

代码提取 -

public class DisableHardButton extends Activity {
    TextView mTextView;
    ToggleButton mToggleButton;
    boolean isLock=false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mTextView=(TextView) findViewById(R.id.tvInfo);
    mToggleButton=(ToggleButton) findViewById(R.id.btnLock);

 mToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         isLock=isChecked;
         onAttachedToWindow();
     }
 });
}

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
        mTextView.setText("KEYCODE_HOME");
        return true;

    } else {
        return super.dispatchKeyEvent(event);
    }

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if( (keyCode==KeyEvent.KEYCODE_BACK) && isLock) {
        mTextView.setText("KEYCODE_BACK");
        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}

@Override
public void onAttachedToWindow() {  
    System.out.println("Onactivity attached :"+isLock);

if(isLock) {   
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
    super.onAttachedToWindow();

} else {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);     
    super.onAttachedToWindow();
}
}
}

XML -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvInfo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hi! This is the testing of override home button" />

    <ToggleButton
        android:id="@+id/btnLock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="UnLocked"
        android:textOn="Locked" />

</LinearLayout>

专门阻止后退按钮的代码 -

@Override
public void onBackPressed() {
    //Do nothing
}

对于旧版本,然后API 5使用此:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        //Do nothing
        return true;
    }

    return super.onKeyDown(keyCode, event);
}