检测是否通过语音命令或触摸输入启动磨损应用

时间:2014-12-15 09:18:05

标签: android wear-os

在我的穿戴应用程序中,我想根据应用程序是通过语音命令还是通过触摸输入启动来显示不同的布局选项。但我在文档中找不到任何方法。

我能想到的唯一可行方法是拥有两个发射器。但我正在寻找比创建多个发射器更直接的解决方案。

2 个答案:

答案 0 :(得分:3)

稍微检查一下活动日志后,我发现了这个:

当您点击Android Wear中的应用时,会记录下来:

  

I / ActivityManager(446):在显示0上从uid 10002开始u0 {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.lge.wearable.compass / .MainActivity}

使用语音命令启动应用程序时,会记录下来:

  

I / ActivityManager(446):START u0 {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10008000 pkg = com.lge.wearable.compass cmp = com.lge来自显示0的uid 10002的.wearable.compass / .MainActivity}

区别在于catcategory参数,其中包含android.intent.category.LAUNCHER作为值。

onCreate功能中的以下代码将区分应用是通过语音启动还是通过用户点按启动。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ....

    Set<String> categories = getIntent().getCategories();
    if(categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) {
        Log.i(LOGTAG, "app started via voice");
    }else{
        Log.i(LOGTAG, "app started with user tap");
    }

    ....
}

这目前适用于我的应用场景,并希望它也适用于其他人。

答案 1 :(得分:0)

从dhaval那里得到答案,我发现在从第三方发射器(例如Wear Mini Launcher)发射时,设置了LAUNCHER类别。

因此,以下检查目前可以使用(虽然可能会在将来的Wear版本中更改):

int flags = getIntent().getFlags();
String pkg = getIntent().getPackage();
if(pkg != null && (flags & Intent.FLAG_ACTIVITY_CLEAR_TASK) > 0) {
    Log.i("MUSICCONTROL", "app started via voice");
}else{
    Log.i("MUSICCONTROL", "app started with user tap");
}