Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有没有可能在没有图标的启动器的情况下启动语音命令?_Android_Android Intent - Fatal编程技术网

Android 有没有可能在没有图标的启动器的情况下启动语音命令?

Android 有没有可能在没有图标的启动器的情况下启动语音命令?,android,android-intent,Android,Android Intent,因此,我编写了一个应用程序,它有一个简单的附加功能,比如切换手机和Wi-Fi。我已经阅读了Android开发者关于“”的文章,并成功地通过Google Now语音命令启动了附带功能活动:“启动mySideFeature活动”,而没有启动我的整个应用程序 问题是,为了使活动能够通过语音命令启动,您必须声明其action.MAIN和category.LAUNCHER。这意味着我的应用程序现在将有两个启动图标,语音命令活动和主应用程序活动本身,显示在应用程序抽屉中 我做了一些研究,但我找不到一种方法从

因此,我编写了一个应用程序,它有一个简单的附加功能,比如切换手机和Wi-Fi。我已经阅读了Android开发者关于“”的文章,并成功地通过Google Now语音命令启动了附带功能活动:“启动mySideFeature活动”,而没有启动我的整个应用程序

问题是,为了使活动能够通过语音命令启动,您必须声明其action.MAIN和category.LAUNCHER。这意味着我的应用程序现在将有两个启动图标,语音命令活动和主应用程序活动本身,显示在应用程序抽屉中

我做了一些研究,但我找不到一种方法从活动中揭示活动是通过点击启动器图标还是通过语音命令启动的

有没有可能在没有图标的启动器的情况下启动语音命令

这是我的清单的一个简单版本,您将看到两个带有启动器的意图过滤器的活动的问题

<application>
  <activity android:name="MainAppActivity" android:label="Main App">
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>
  <activity android:name="sideFeatureActivity" android:label="Launch Side Feature">
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>
</application>

在主要活动的onCreate add中:

Intent intent = getIntent();
Set<String> categories = getCategories();
if (categories != null && categories.contains(".LAUNCHER")) {
   ... //Started via launcher tap
} else {
   ... //Started via voice command
}
Intent-Intent=getIntent();
Set categories=getCategories();
if(categories!=null&&categories.contains(“.LAUNCHER”)){
…//通过启动器点击启动
}否则{
…//通过语音命令启动
}

作为一个“黑客”,我会尝试这样做:调试您的主要活动,当通过voice vs从launcher启动时,看看是否有办法判断您处于哪种情况。看看getIntent(),看看你有什么?捆额外的?如果您知道如何区分差异,那么您已经可以知道如何执行sideFeature或mainActivity。从getIntent()返回的Intent开始,我看到的唯一区别是,当由语音启动时,Intent的“categories”数组为空,而当由启动器图标启动时,它包含“.LAUNCHER”项。。。