禁用Nexus 7上的所有主页按钮和任务栏功能

时间:2013-05-20 19:54:15

标签: android operating-system nexus-7

我正在构建一个应用程序,它将成为展览的一部分。它将显示在可以安全安装的Nexus 7上。该应用程序具有触摸屏功能,并将显示交互式内容。

我需要能够在显示时禁用尽可能多的功能,因为我不希望公众能够获得除应用程序之外的任何其他功能。

我正在努力的主要事情是后退/主页/最近的应用程序列表按钮。我找到了一些禁用主页按钮的示例(儿童锁Android - Is It possible to disable the click of home button )但理想情况下我需要按钮是不可见的,所以要关闭'发光'(黑色会很好)。

Nexus 7的底部是否以某种方式受到保护,是否有其他版本的Android可以让我这样做? Nexus设备仅用于显示此应用,不需要其他功能。

任何建议都会很棒,非常感谢。

3 个答案:

答案 0 :(得分:9)

没有创建自定义Android rom以删除底部按钮的最佳解决方案是将应用程序全屏显示,覆盖后退按钮,并使应用程序成为启动器以覆盖主页按钮。

AFAIK,无法覆盖最近的应用按钮。

修改:另一个选项是拥有全屏应用,然后使用覆盖按钮的装载。 (感谢MaciejGórski的想法)。

要全屏显示您的应用,请将以下内容放入您的活动onCreate()

requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

或者你也可以在清单中全屏显示应用程序,感谢@Niels:

<application android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">

要覆盖后退按钮,请添加以下方法:

@Override
public void onBackPressed() {
    return;
}

现在主页按钮比较棘手,将以下内容添加到您的清单中:

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

以及<activity>

下的清单
<intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

并将其发送到<application>下的清单,确保<receiver name>是您定义的完整包名称路径:

<receiver android:name="com.example.BootCompleteReceiver">
   <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED" />
   </intent-filter>
</receiver>

最后,创建一个名为 BootCompleteReceiver 的java类文件,并使用以下代码:

public class BootCompleteReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent startActivityIntent = new Intent(context, YourActivityName.class);
    startActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(parentActivityIntent);
  }
}

要稍后禁用您的应用作为主屏启动器,请按最近的应用按钮,从右侧向下滑动,点按设置,转到应用,然后点按右上角的三个点(垂直对齐),按“重置应用”首选项“,然后最后按”重置应用“。

我认为应该只是涵盖所有内容。

编辑2 我刚刚实现/测试过,如果您将应用程序作为启动器,则不一定需要BOOT_COMPLETED意图。这意味着不需要<uses-permission><receiver>BootComplete.java。您只需使用包含MAIN,HOME和DEFAULT属性的<intent-filter>

编辑3 此处提供更多/不同的信息:Home Launcher issue with Fragments after reboot

答案 1 :(得分:4)

除此之外,这一切都很有效,并确保有一个全面的答案......

  

AFAIK,无法覆盖最近的应用按钮。

我通过更改onPause应用程序行为来启动警报管理器。可能有更优雅的解决方案,但这很有效。

首先,创建重复的alarmmanager setupAlarm(秒)(完整详细信息herehere,注意我使用重复闹钟而不是一次关闭,认为两者都会起作用)开始你的活动

然后更改onPause以设置2秒钟警报,因此每当有人选择导航栏上的最近应用按钮时,都会设置启动mainActivity的2秒“警报”。

@Override
public void onPause() {
    setupAlarm(2);
    finish(); //optional
    super.onPause();

}

因此,使用此以及上述内容,任何使用导航按钮或重新启动应用程序的尝试都会导致应用程序启动。所以,直到我开始调查“自助服务亭”式的roms,这是一个非常好的妥协。

答案 2 :(得分:0)

我可能会迟到。

但是,我认为,这是针对“最近使用的应用程序按钮”问题的最佳解决方案:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (&& !hasFocus) {
        // Close every kind of system dialog
        Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        sendBroadcast(closeDialog);

        // send task back to front
        ActivityManager activityManager =
                (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
        activityManager.moveTaskToFront(getTaskId(), 0);
    }
}

“将任务发送回前端”部分将阻止通知栏的下拉,只需立即将其发送回去,即可关闭“最近使用的应用”视图。 另一种是当他尝试关闭手机时关闭“关机/重新启动”视图。

现在,请打扰我的英语,并度过愉快的一天。

问候 吉米