Android SearchManager在Instant App中为空

时间:2018-01-16 19:49:13

标签: android android-instant-apps

我正在使用一个在可安装的应用程序中运行良好的简单搜索对话框,但只有在将代码作为即时应用程序运行时才会出现NullPointerException:

  

java.lang.NullPointerException:尝试调用接口方法   “android.app.SearchableInfo   android.app.ISearchManager.getSearchableInfo(android.content.ComponentName)”   在空对象引用上

所有代码和资源都在基本模块中。

这发生在我的启动器活动中的onCreateOptionsMenu中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_entity, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    return true;
}

这是menu.xml文件(使用appcompat):

<menu xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search_white"
        android:title="@string/menu_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="collapseActionView|ifRoom"/>
</menu>

searchable.xml文件如下,以防万一:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
            android:label="@string/app_name"
            android:hint="@string/search_hint" >
</searchable>

Manifest.xml中的活动:

<activity android:name=".EntityActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEARCH"/>
    </intent-filter>

    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable"/>
</activity>

可安装的应用程序正常运行。任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

您需要更新适用于预先设备的即时应用的Google Play服务。

在您的设备上:

  1. 转到Settings &gt; Apps &gt; Google Play services for Instant Apps &gt; Uninstall

  2. 通知应提示您恢复&gt; restore it

  3. 这应该更新它应该不再导致此崩溃的最新版本,目前位于2.11-release-183080821

    注意:很遗憾,到目前为止,不适用于模拟器,Android Studio会为其安装过时的版本。