Не удается получить результаты поиска из Google Now

Я пытаюсь получить результат поиска из Google Now. Я выполнил инструкции на http://android-developers.blogspot.com/2014/10/the-fastest-route-between-voice-search.html и https://developer.android.com/guide/components/намерения-common.html#SearchOnApp.

Он работает через ADB, но не после того, как я публикую приложение в PlayStore. При попытке поиска ("Поиск чего-то в Casa Controller") он говорит, что открывает приложение, но затем не открывает. Любые идеи?

Команда 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);
    }


}

person Benjamin Biddle    schedule 28.06.2015    source источник
comment
Эй, Бенджамин, ты нашел решение своей проблемы? У меня такая же проблема.   -  person chuckliddell0    schedule 13.08.2015
comment
Нет, я до сих пор не нашел решения этой проблемы.   -  person Benjamin Biddle    schedule 14.08.2015


Ответы (1)


Во-первых, я не думаю, что вам нужно переопределять метод onNewIntent(), в любом случае это не нужно, чтобы распознавание голоса работало.

Попробуйте добавить метку к вашему intent-filter в свой xml, как показано ниже, это помогло мне.

<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" />

If this does not work then try moving your two intent-filter tags into the one activity. Your app may be getting confused as to which activity is supposed to interpret the action.

Убедитесь, что вы запускаете это в версии сборки вашего приложения, которая была выпущена в магазине игр. Поэтому, если идентификатор вашего опубликованного приложения — com.example.myapp, убедитесь, что вы не пытаетесь запустить этот тест на сборке отладки com.example.myapp.debug или что-то в этом роде.

Также обратите внимание, что если ваше приложение имеет странное имя, например «MySup3rC00lApp» или что-то в этом роде, Android может не открыть его, поскольку не сможет идентифицировать приложение.

person chuckliddell0    schedule 13.08.2015