【问题标题】:Kiosk Mode / Screen Pinning in Android wearAndroid Wear 中的 Kiosk 模式/屏幕固定
【发布时间】:2015-12-24 09:07:16
【问题描述】:

我正在为带有 Android Lollipop 的 Sony Smartwatch 3 开发 Android Wear 应用程序,但似乎找不到实现工作亭模式的方法。
我到处寻找,但似乎没有任何效果。
还尝试了屏幕固定,但没有选项可以在手表上(手动)执行此操作,并且将 startLockStart() 添加到我的 onCreate 似乎没有任何作用 - 我仍然可以退出应用程序。

任何帮助或确认这是不可能的,我们将不胜感激

【问题讨论】:

    标签: android wear-os sony-smartwatch kiosk-mode android-screen-pinning


    【解决方案1】:

    确保您运行的是 Android L MR1 (Android 5.1)。在运行 L MR0 (Android 5.0) 的 Sony 设备中,startLockTask 的 Google 实现存在一个错误,可以退出应用程序。

    由于这是普通的 Google 代码,因此很可能在其他 OEM 设备上也是如此。

    如果您没有使用设备管理应用程序,请确保您的应用程序的 lockTaskMode 不是 1 或 3。

    希望这会有所帮助。

    /Marek(索尼移动员工)

    【讨论】:

    • 如何更改lockTaskMode
    • 在应用程序清单 AndroidManifest.xml 中定义。您应该使用默认值 0 找到。
    • @MarekPola,我似乎无法让它工作......我还尝试了将应用程序转为设备所有者的所有方法,但 NFC 总是将我的手机带到磨损应用程序,adb 命令失败并在手表的数据/系统中创建 device_owner.xml 没有反馈(应该吗?)
    【解决方案2】:

    我在 Medium 上写了一篇博客,以在 Android Wear 上实现 Kiosk 模式。它在 Wear OS 2.X 上完全运行,在 Wear OS 1.X 上运行 90%。请查看Medium

    步骤:

    1: REORDER_TASKS : 在应用的 onPause 中重新排序你的应用到顶部。

    ActivityManager activityManager = (ActivityManager) getApplicationContext()
                    .getSystemService(Context.ACTIVITY_SERVICE);
    
            activityManager.moveTaskToFront(getTaskId(), 0);
    

    2:将类别设置为清单中的活动:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    

    3:覆盖按钮的功能

    public boolean onKeyDown(int keyCode, KeyEvent event){
        if (event.getRepeatCount() == 0) {
            if (keyCode == KeyEvent.KEYCODE_STEM_1) {
                // Do stuff
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_STEM_2) {
                // Do stuff
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_STEM_3) {
                // Do stuff
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    

    4:通过应用主题禁用滑动功能

    <style name="AppTheme" parent="@android:style/Theme.DeviceDefault">
        <item name="android:windowSwipeToDismiss">false</item>
    </style>
    

    5:启动时重新启动应用程序

    注意:

    此功能对用户不友好,除非您有非常充分的理由,否则 Android Play 商店不会批准这些功能

    【讨论】:

    • 不错!虽然我无法从 onKeyDown 获得任何输出?知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2011-01-05
    相关资源
    最近更新 更多