i'm creating an app, which will be used by kids and so client wants me to disable any way of getting out of it. I managed to block home button, also back button, but what about others app button? I can hide all down buttons, but it is possible to show them by swiping from down to top.
So is it possible to disable "other apps" button in Android, or somehow override it's action?
Post ICS i.e. Android 4+, the overriding of the HomeButton has been removed for security reasons, to enable the user exit in case the application turns out to be a malware.
Here is article for blocking home button on devices below 4.0 - Overriding Home Button
Code Extract -
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>
Code for specifically blocking the back button -
@Override
public void onBackPressed() {
//Do nothing
}
and for older then API 5 use this:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//Do nothing
return true;
}
return super.onKeyDown(keyCode, event);
}