【问题标题】:Unable to receive search results from Google Now无法从 Google Now 接收搜索结果
【发布时间】:2015-06-28 23:15:16
【问题描述】:

我正在尝试从 Google Now 获取搜索结果。我已按照http://android-developers.blogspot.com/2014/10/the-fastest-route-between-voice-search.html 和https://developer.android.com/guide/components/intents-common.html#SearchOnApp 上的说明进行操作。

它通过 ADB 工作,但在我将应用程序发布到 PlayStore 后就不行了。 尝试搜索时(“在 Casa Controller 上搜索某些东西),它说它正在打开应用程序,但随后没有't. 有什么想法吗?

ADB 命令测试

adb shell am start -a com.google.android.gms.actions.SEARCH_ACTION --es query "salad" io.biddleinc.casacontroller

我的 Android 清单

  <?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="20702" android:versionName="2.7.2" android:windowSoftInputMode="adjustPan" package="io.biddleinc.casacontroller" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:exported="true" android:label="@string/app_name" android:launchMode="singleTop" android:name="HelloCordova" android:theme="@android:style/Theme.Black.NoTitleBar">
            <intent-filter>
                <action android:name="com.google.android.gms.actions.SEARCH_ACTION" />
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="android.app.default_searchable" android:value=".SearchActivity" />
        </activity>
        <activity android:label="@string/app_name" android:name=".SearchActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="22" />
</manifest>

我的 searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint">
</searchable> 

我的 strings.xml

    <?xml version='1.0' encoding='utf-8'?>
<resources>
    <string name="app_name">Casa Controller</string>
    <string name="app_label">Casa Controller</string>
    <string name="search_hint">What do you want to happen</string>
</resources>

我的 Activity.java

package io.biddleinc.casacontroller;


import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import org.apache.cordova.*;

public class HelloCordova extends CordovaActivity 
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.init();

        Intent intent = getIntent();
        String url = "file:///android_asset/www/login_full.html";
        if (Intent.ACTION_SEARCH.equals(intent.getAction())
                || "com.google.android.gms.actions.SEARCH_ACTION".equals(intent.getAction())) {
            url += "?search=" + intent.getStringExtra(SearchManager.QUERY);
        }   
        super.loadUrl(url);
        // Set by <content src="index.html" /> in config.xml
        //super.loadUrl(Config.getStartUrl());
        //super.loadUrl("file:///android_asset/www/index.html");
    }

    @Override
    protected void onNewIntent(Intent intent)
    {
        //super.onNewIntent(intent);

        if (Intent.ACTION_SEARCH.equals(intent.getAction())
               || "com.google.android.gms.actions.SEARCH_ACTION".equals(intent.getAction())) {
        String phrase = intent.getStringExtra(SearchManager.QUERY);
        String url = "javascript: { recongizeSpeechFromGoogle('"+ phrase + "'); }";
        super.loadUrl(url);

        }

        //Forward to plugins
        if (this.appView != null)
           this.appView.onNewIntent(intent);
    }


}

【问题讨论】:

  • 嘿本杰明,您找到解决问题的方法了吗?我有同样的问题。
  • 不,我还没有找到解决办法。

标签: android cordova search google-now


【解决方案1】:

首先,我认为您不需要覆盖onNewIntent() 方法,无论如何都不需要让语音识别正常工作。

尝试在您的 xml 中为您的 intent-filter 添加标签,如下所示,这对我有用。

<manifest android:hardwareAccelerated="true" android:versionCode="20702" android:versionName="2.7.2" android:windowSoftInputMode="adjustPan" package="io.biddleinc.casacontroller" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:exported="true" android:label="@string/app_name" android:launchMode="singleTop" android:name="HelloCordova" android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter android:label="@string/app_name">
            <action android:name="com.google.android.gms.actions.SEARCH_ACTION" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.app.default_searchable" android:value=".SearchActivity" />
    </activity>
    <activity android:label="@string/app_name" android:name=".SearchActivity">
        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.SEARCH" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
    </activity>
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="22" />

如果这不起作用,请尝试将您的两个 intent-filter 标签移动到一个活动中。您的应用可能会对应该由哪个 Activity 解释该操作感到困惑。

确保您在已发布到 Play 商店的应用的构建变体上运行此程序。因此,如果您发布的应用程序 ID 是 com.example.myapp,那么请确保您没有尝试在调试版本 com.example.myapp.debug 或类似的东西上运行此测试。

另外请注意,如果您的应用有一个奇怪的名称,例如“MySup3rC00lApp”或类似名称,那么 Android 可能无法打开它,因为它无法识别该应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2018-02-01
    • 2021-06-28
    • 2013-04-02
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多