【问题标题】:Search view is not working on map API搜索视图不适用于地图 API
【发布时间】:2016-10-30 06:50:49
【问题描述】:

我正在使用这个code,我在

中得到错误值
if(intent.getAction().equals(Intent.ACTION_SEARCH))

这种情况,所以搜索视图不起作用。感谢任何帮助。

地图活动

public class MapsActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor>,OnMapReadyCallback {
    private GoogleMap mMap;
    private PopupMenu supportMenuInflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mMap = fragment.getMap();
        Log.e("MAP"," load");
        handleIntent(getIntent());
    }

    private void handleIntent(Intent intent){
        Log.e("handle intent"," load"+intent);

        Log.e("handle intent"," rate "+intent.getAction().equals(Intent.ACTION_SEARCH));

        if(intent.getAction().equals(Intent.ACTION_SEARCH))
        {
            Log.e("handle intent"," if"+intent.getAction().equals(Intent.ACTION_SEARCH));
            doSearch(intent.getStringExtra(SearchManager.QUERY));
        }
        else if(intent.getAction().equals(Intent.ACTION_VIEW))
        {
            Log.e("handle intent"," else if");
            getPlace(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY));
        }
        else
        {
            Log.e("handle intent"," else");
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        handleIntent(intent);
    }

    private void doSearch(String query){
        Log.e("Dosearch"," load "+query);
        Bundle data = new Bundle();
        data.putString("query", query);
        getSupportLoaderManager().restartLoader(0, data, this);
    }

    private void getPlace(String query){
        Log.e("getPlace"," load "+query);
        Bundle data = new Bundle();
        data.putString("query", query);
        getSupportLoaderManager().restartLoader(1, data, this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu
        getMenuInflater().inflate(R.menu.main, menu);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView();
            search.setIconifiedByDefault(false);
            search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
            search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextChange(String query) {
                    doSearch(query);
                    return true;
                }

                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }
            });
        }
        return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()){
            case R.id.action_search:
                onSearchRequested();
                break;
        }
        return super.onMenuItemSelected(featureId, item);
    }
    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle query) {
        CursorLoader cLoader = null;
        if(arg0==0)
            cLoader = new CursorLoader(getBaseContext(), PlaceProvider.SEARCH_URI, null, null, new String[]{ query.getString("query") }, null);
        else if(arg0==1)
            cLoader = new CursorLoader(getBaseContext(), PlaceProvider.DETAILS_URI, null, null, new String[]{ query.getString("query") }, null);
        return cLoader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor c) {
        showLocations(c);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        // TODO Auto-generated method stub
    }

    private void showLocations(Cursor c){
        MarkerOptions markerOptions = null;
        LatLng position = null;
        mMap.clear();
        while(c.moveToNext()){
            markerOptions = new MarkerOptions();
            position = new LatLng(Double.parseDouble(c.getString(1)),Double.parseDouble(c.getString(2)));
            markerOptions.position(position);
            markerOptions.title(c.getString(0));
            mMap.addMarker(markerOptions);
        }
        if(position!=null){
            CameraUpdate cameraPosition = CameraUpdateFactory.newLatLng(position);
            mMap.animateCamera(cameraPosition);
        }
    }
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        Log.e("OnReady", String.valueOf(sydney));
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }

}

【问题讨论】:

    标签: android google-maps autocomplete searchview


    【解决方案1】:
    Error Was in Manifest file 
    
        enter code here
     <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <!-- Protect the map component of the application using application signature -->
        <permission
            android:name="com.example.user.demo.permission.MAPS_RECEIVE"
            android:protectionLevel="signature" />
    
        <!-- Allows to receive map -->
        <uses-permission android:name="com.example.user.demo.MAPS_RECEIVE" />
    
        <!-- Used by the Google Maps Android API V2 to download map tiles from Google Maps servers -->
        <uses-permission android:name="android.permission.INTERNET" />
    
        <!-- Allows the Google Maps Android API V2 to cache map tile data in the device's external storage area -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
        <!-- Allows the Google Maps Android API V2 to use WiFi or mobile cell data (or both) to determine the device's location -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
        <!-- Allows the Google Maps Android API V2 to use the Global Positioning System (GPS)
        to determine the device's location to within a very small area -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
        <!-- Allows to contact Google Serves -->
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    
        <!-- Google Maps Android API V2 requires OpenGL ES version 2 -->
        <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true" />
    
        <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat" >
            <activity
                android:name=".MapsActivity"
                android:label="@string/app_name"
                android:launchMode="singleTop" >
                <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>
    
                <!-- Points to searchable activity -->
                <meta-data android:name="android.app.default_searchable"
                    android:value=".MainActivity" />
    
                <!-- Points to searchable meta data -->
                <meta-data android:name="android.app.searchable"
                    android:resource="@xml/searchable"/>
    
            </activity>
    
            <provider
                android:name=".PlaceProvider"
                android:authorities="com.example.user.demo.PlaceProvider"
                android:exported="false" />
    
            <!-- Specifies the Android API Key, which is obtained from Google API Console -->
            <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="--------------------------------" />
    
        </application>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多