如何在Android Launcher应用程序中处理主页按钮问题

时间:2013-12-24 07:02:30

标签: android android-homebutton

我正在创建一个示例锁定屏幕应用程序,我必须覆盖主页按钮,在我研究了google和stackoverflow之后我得到了结果,这样做很复杂。在这里,我提到我在我的应用程序中做了什么,

  1. 使用广播接收器创建服务,以在屏幕关闭时显示我的锁定屏幕。 - 工作正常。

  2. 要覆盖主页,菜单,后退和搜索按钮,我使用了以下代码, 希望我们可以在应用程序成为启动器时覆盖主页按钮,所以在我的manifest.xml中我添加了这段代码。

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
            <!-- <category android:name="android.intent.category.LAUNCHER" /> -->
    
        </intent-filter>
    
  3. 同样在我的活动中我也使用了这段代码

    @Override
        public void onAttachedToWindow() {
    
                // TODO Auto-generated method stub
                this.getWindow().setType(
                        WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
                                | WindowManager.LayoutParams.FLAG_FULLSCREEN);
                this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    
            super.onAttachedToWindow();
        }
    

    到目前为止,在我的示例应用程序中,我成功完成了以上内容。现在我的问题是,

    当我解锁屏幕然后转到任何应用程序,然后我单击设备主页按钮,我的锁定屏幕将出现。我厌倦了禁用此功能,但我不知道我怎么能完全做到这一点,因为我使用了下面的代码,

    /* This should come from a preference that let's the user select an activity that can handle the HOME intent */
    String packageName = "com.android.launcher";
    String packageClass = "com.android.launcher2.Launcher";
    
    Intent home_intent = new Intent(Intent.ACTION_MAIN);
    home_intent.addCategory(Intent.CATEGORY_HOME);
    home_intent.setComponent(new ComponentName(packageName, packageClass));
    home_intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    /* Here you should catch the exception when the launcher has been uninstalled, and let the user save themselves by opening the Market or an app list or something. Users sometimes use root apps to uninstall the system launcher, so your fake launcher is all that is left. Might as well give the poor user a hand. */
    startActivity(home_intent);
    

    没有代码可以帮助我,我的确切需要是一旦我解锁屏幕我需要显示默认主屏幕,直到屏幕关闭屏幕。有任何想法来处理这个问题吗?在此先感谢。

1 个答案:

答案 0 :(得分:0)

试试这个解决方案,

创建一个静态变量flag,当您收到屏幕关闭时的广播时,该变量设置为true

现在在activity检查标志是否为真

@Override
public void onAttachedToWindow() {
    if(MyService.Flag == true){
    //Continue with your code ...
    //....
    }else{
        finish();
    }
}

或在适用于你的onCreate上进行

屏幕解锁后

    //Disable the flag
    MyService.Flag = false;

现在,当您的用户点击Home按钮时,系统会调用该活动并再次检查该标志,如果错误,则调用finish()关闭活动