1

我目前正在我的应用程序中实现 Google 的应用程序索引 api 和语音搜索功能,并且遇到了 Google 无法在某些设备上搜索我的应用程序的问题。我测试过的大多数设备都按照他们的代码实验室示例进行了预期的工作,其中会弹出带有自动完成功能的本地搜索,以查找在我的应用程序中搜索的内容。当我的应用程序正常工作时,它会出现在要在 Google 电话搜索设置中搜索的应用程序中。

但是,出于某种原因,我测试过的某些设备(特别是运行 4.3 的 Galaxy S3 和运行 4.4.2 的 Galaxy Note 3)没有让我的应用程序出现在 Google 电话搜索设置中。这反过来意味着,尽管 App Indexing api 告诉我索引 api 调用成功,但我的自动完成结果都没有出现。当电话搜索设置中缺少应用程序时,谷歌语音搜索到我的应用程序也会失败,当它通常可以在说“搜索 <-MyApplication-> for <-Content->”时使用。

无论自动完成或语音搜索如何工作,我在我的应用程序中设置的深层链接似乎都可以工作。这让我相信这个问题甚至可能不是我可以在应用程序中解决的问题。

这是我的清单:

<activity android:name=".StartActivity"
              android:theme="@android:style/Theme.NoDisplay"
              android:noHistory="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <!--Google Voice Search-->
        <intent-filter>
            <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
        <!--Deep link-->
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="MyApp"/>
            <action android:name="android.intent.action.VIEW"/>
        </intent-filter>
    </activity>

以下是我在我的一项活动中调用应用程序索引 api 的方式:

private void fireNewApplicationIndex(){
    try {
            JSONObject obj; 
            ...

            //The filters have been updated within the running activity
            if(deepLink != null && mClient.isConnected()){
                AppIndex.AppIndexApi.viewEnd(mClient, this, deepLink);
                deepLink = null;
            }

            //Connect the client if it wasn't already
            if(!mClient.isConnected())
                mClient.connect();

            //Report to google the deep link and the auto complete title
            deepLink = Uri.parse(obj.getString(UriHandler.DEEP_LINK));
            PendingResult<Status> result = AppIndex.AppIndexApi.view(mClient, this, deepLink, title, UriHandler.EMPTY_WEB_URI, null);
            result.setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    if(status.isSuccess()){
                        Log.d(TAG, "App Indexing success " + title);
                    } else {
                        Log.d(TAG, "App Indexing failure: " + status.toString());
                    }
                }
            });

        }
    } catch (Exception e) {
        Log.d("App Indexing", e.getMessage() + "");
        if(mClient.isConnected())
            mClient.disconnect();
    }
}
4

1 回答 1

2

经过大量调试和比较我的测试设备后,我发现无法显示自动完成功能的设备使用的是旧版本的 Google 应用程序。为了让应用程序能够被搜索并显示自动完成功能,Google 应用程序必须是 v4.2+!

于 2015-03-11T20:52:00.190 回答