¿Cómo consigo un Uri para una imagen en mis Activos que funcionará para la columna SearchManager.SUGGEST_COLUMN_ICON_1?

He integrado con éxito la búsqueda de países de mi aplicación en el servicio de búsqueda global y ahora estoy tratando de mostrar la bandera de cada país junto a las sugerencias de búsqueda. La búsqueda dentro de mi aplicación funciona de esta manera, pero por supuesto tengo el control de la lista y su punto de vista vinculante. Así que sé que todas las banderas están ahí y puedo usarlas en el resto de mi aplicación.

El problema surge cuando intento suministrar un Uri a un archivo .gif en mis Activos. De acuerdo con la documentación de búsqueda, el valor de la columna con la claveSearchManager.SUGGEST_COLUMN_ICON_1 debería ser un Uri para la imagen.

A continuación se muestra cómo se ve el código. En respuesta a laContentProvider métodopublic Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) Estoy creando unMatrixCursor que asigna columnas de la base de datos de mi país a las requeridas por el servicio de búsqueda. Los nombres de los países aparecen bien y puedo seleccionarlos y responder correctamente en mi solicitud.

He intentado formar el Uri de tres maneras diferentes:

//                    String flagUri = "file:///android_asset/" + flagPath;
//                    String flagUri = "file:///assets/" + flagPath;
                    String flagUri = "android.resource://com.lesliesoftware.worldinfo.WorldInfoActivity/assets/" + flagPath;
                    columnValues.add (flagUri);

Todos conducen a lo mismo: el icono de mi aplicación junto a cada sugerencia que puedo obtener al usar un valor de cadena vacía.

¿Hay un Uri que funcione? ¿Cómo puedo obtener el ícono de la bandera del país junto a las sugerencias de búsqueda?

Gracias Ian

La fuente completa:

private Cursor search (String query, int limit)  {
    query = query.toLowerCase ();
    String[] requestedColumns = new String[]  {
            BaseColumns._ID, 
            SearchManager.SUGGEST_COLUMN_TEXT_1,
            SearchManager.SUGGEST_COLUMN_ICON_1,
    };
    String[] queryColumns = new String[]  {
            WorldInfoDatabaseAdapter.KEY_ROWID, 
            WorldInfoDatabaseAdapter.KEY_COUNTRYNAME,
            WorldInfoDatabaseAdapter.KEY_COUNTRYCODE
    };

    return packageResults (query, requestedColumns, queryColumns, limit);
}


private Cursor packageResults (String query, String[] requestedColumns, String[] queryMappedColumns, int limit)  {
    if (requestedColumns.length != queryMappedColumns.length)
        throw new IllegalArgumentException ("Internal error: requested columns do not map to query columns");

    MatrixCursor results = new MatrixCursor (requestedColumns);

    //  Query the country list returns columns: KEY_ROWID, KEY_COUNTRYNAME, KEY_COUNTRYCODE
    Cursor dbResults = myDbHelper.getCountryList (query);

    //  Verify that the query columns are available
    for (int index = 0; index < queryMappedColumns.length; index++)  {
        int col = dbResults.getColumnIndex (queryMappedColumns[index]);
        if (col == -1)
            throw new IllegalArgumentException ("Internal error: requested column '" + 
                    queryMappedColumns[index] + "' was not returned from the database.");
    }

    //  Loop over the database results building up the requested results
    int rowCount = 0;
    while (dbResults.moveToNext ()  &&  rowCount < limit)  {
        Vector<String> columnValues = new Vector<String> ();
        for (int index = 0; index < requestedColumns.length; index++)  {
            if (requestedColumns[index].compareTo (SearchManager.SUGGEST_COLUMN_ICON_1) == 0)  {
                String flagPath = "flags/small/" + dbResults.getString (
                        dbResults.getColumnIndexOrThrow (queryMappedColumns[index]))
                        + "-flag.gif";
//                    String flagUri = "file:///android_asset/" + flagPath;
//                    String flagUri = "file:///assets/" + flagPath;
                String flagUri = "android.resource://com.lesliesoftware.worldinfo.WorldInfoActivity/assets/" + flagPath;
                columnValues.add (flagUri);
            }  else  {
                //  Add the mapped query column values from the database
                String colValue = dbResults.getString (dbResults.getColumnIndexOrThrow (queryMappedColumns[index]));
                columnValues.add (colValue);
            }
        }

        results.addRow (columnValues);
        rowCount++;
    }

    return results;
}

EDITAR: He intentado otras variaciones, como mover las imágenes de los activos a la carpeta sin formato. Nada funcionó. Aquí están los uri que probé:

flagUriStr = "android.resource://com.lesliesoftware.worldinfo/raw/flags/small/" + 
    countryCode + "-flag.gif";

flagUriStr = "android.resource://com.lesliesoftware.worldinfo/assets/flags/small/" + 
    countryCode + "-flag.gif";

flagUriStr = "android.resource://com.lesliesoftware.worldinfo/assets/flags/small/" + 
    countryCode + "-flag";

flagUriStr = "android.resource://com.lesliesoftware.worldinfo/raw/" + 
    countryCode + "-flag.gif";

flagUriStr = "android.resource://com.lesliesoftware.worldinfo/raw/" + 
    countryCode + "-flag";

La única uri que funcionó fue si moví un indicador de prueba a mi carpeta dibujable:

flagUriStr = "android.resource://com.lesliesoftware.worldinfo/" + 
    R.drawable.small_ca_flag;

Respuestas a la pregunta(4)

Su respuesta a la pregunta