【问题标题】:Disable Home button by making my app a homeScreen App通过使我的应用程序成为 homeScreen 应用程序来禁用主页按钮
【发布时间】:2018-11-09 11:02:14
【问题描述】:

我正在尝试开发一个锁定应用程序,我禁用了主页按钮单击但仅在按钮被硬单击的手机中,但在没有硬主页按钮的最新版本中,主页按钮未被禁用。所以在搜索之后我发现解决这个问题的唯一方法就是让我的应用像 HomeScreen 一样,我将它添加到我的清单中:

    <activity
        android:name=".HomeActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActivity"
            android:clearTaskOnLaunch="true"
            android:excludeFromRecents="true"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:stateNotNeeded="true" >
            <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>
        </activity>

当运行这个应用程序时,它显示我在我的应用程序和安卓屏幕之间进行选择,当我选择我的应用程序时,每次我点击主页按钮它都会打开我的应用程序!

我的问题是:

1- 这是在所有 android 版本中处理主页按钮的唯一方法吗?将我的应用设为 HomeScreen 应用?

2- 有没有其他方法可以仅在我的应用打开时禁用主页按钮?

3- 成功打开锁后,如何以编程方式切换到 TouchWiz 默认主屏幕并删除我的应用作为主屏幕?

谢谢

【问题讨论】:

  • 在应用程序启动时您还有其他要启动的活动吗?
  • 是的,我做了,但问题是每次点击主页按钮都会打开应用程序,而且无法从手机上卸载它!

标签: android


【解决方案1】:

尝试删除其他活动并继续:

    <activity android:name=".MainActivity"
            android:clearTaskOnLaunch="true"
            android:excludeFromRecents="true"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:stateNotNeeded="true" >
            <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
            <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>
        </activity>

每次有人点击主页按钮时,它都会打开您的主屏幕活动,这一次不必先打开主页活动。

编辑

如果您想在按下主页按钮后返回默认启动器,您可以覆盖这些方法:

   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_HOME)
        {
            Intent intent=null;
final PackageManager packageManager=getPackageManager();
for(final ResolveInfo resolveInfo:packageManager.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY))
{
    if(!getPackageName().equals(resolveInfo.activityInfo.packageName))  //if this activity is not in our activity (in other words, it's another default home screen)
    {
        intent=packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName));
startActivity(intent);
        break;
    }
}
        }
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            finish();
        }
        return false;
    }

【讨论】:

  • 是的,但我的应用程序只是一个手机锁应用程序,这意味着当用户成功输入密码时,我希望默认主屏幕是正常的:TouchWiz 而不是我的应用程序!有没有办法以编程方式做到这一点?
  • 这正是我所需要的!启动默认启动器或打开主屏幕选择器的代码是什么?
  • 我已经更新了我的答案,请检查。如果它有效,请回来并提及它可以帮助未来的读者。
  • 应用程序崩溃!它向我显示了这个异常:java.lang.IllegalArgumentException:添加窗口后无法更改窗口类型。
  • 而且这一行没有编译 TYPE_KEYGUARD this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);我将其更改为:TYPE_KEYGUARD_DIALOG(唯一可用)
猜你喜欢
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2018-12-04
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多