我目前正在我的应用程序中实现Google的应用程序索引API和语音搜索功能,并且遇到了Google无法在某些设备上搜索我的应用程序的问题。我测试过的大多数设备都按照其代码实验室示例按预期工作,其中带有自动完成功能的本地搜索会弹出在我的应用程序中搜索的内容。我的应用程序在正常工作时会显示在 Google 手机搜索设置中要搜索的应用程序中。
但是,由于某种原因,我测试过的某些设备(特别是运行4.3的Galaxy S3和运行4.4.2的Galaxy Note 3)没有让我的应用程序出现在Google手机搜索设置中。这反过来意味着,尽管应用索引 API 告诉我索引 api 调用成功,但我的自动完成结果都不会显示。当电话搜索设置中缺少该应用程序时,我的应用程序中的Google语音搜索也会失败,而当它通常在说"搜索<-MyApplication->以获取<-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();
}
}
经过大量调试和比较我的测试设备,我发现无法显示自动完成的设备使用的是旧版本的Google应用程序。为了识别应用程序以搜索并显示自动完成功能,Google应用程序必须是v4.2+!