【问题标题】:Is it possible to disable "other apps" button in Android?是否可以在 Android 中禁用“其他应用程序”按钮?
【发布时间】:2014-09-15 13:32:35
【问题描述】:

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

那么是否可以禁用 Android 中的“其他应用”按钮,或者以某种方式覆盖它的操作?

【问题讨论】:

  • 你是如何阻止主页按钮的?上次我检查时,android 不允许阻止主页按钮。贴一些代码。
  • 我认为,为了制作具有此功能的儿童友好型应用程序,您需要在设备上安装一个自定义 rom 以支持此功能(如在nabi 平板电脑)或拥有 root 权限并能够手动编辑 rom 的配置文件。我觉得应用程序本身和阻止导航的应用程序需要是单独的应用程序
  • 对,您是如何禁用主页按钮的?真的会很有趣。
  • "Blocking" HOME按钮很简单,只需要设置你的应用程序为Launcher,所以添加这个代码: 在 Manifest 中,在活动意图过滤器中。比您需要选择应用程序作为默认启动器,在我的情况下这是可能的,因为我们在将其提供给用户之前配置了这些平板电脑。

标签: android android-homebutton


【解决方案1】:

在 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);
}

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多