Cursor.getType () para el nivel de API <11

Estoy consultando el proveedor de contenido de CallLog y necesito detectar los tipos de columna.

En Honeycomb y más nuevos (nivel API 11+) puede obtener un tipo de datos preferido de columnas llamando al métodoCursor.getType(int columnIndex) que devuelve uno de los siguientes tipos:

FIELD_TYPE_NULL (0)FIELD_TYPE_INTEGER (1)FIELD_TYPE_FLOAT (2)FIELD_TYPE_STRING (3)FIELD_TYPE_BLOB (4)

¿Cómo puedo lograr esto en los dispositivos pre-Honeycomb <11?

He intentado lo siguiente:

for ( int i = 0; i < cursor.getColumnCount(); i++ ) {    

    int columnType = -1;
    try {
        cursor.getInt( i );
        columnType = Cursor.FIELD_TYPE_INTEGER;

    } catch ( Exception ignore ) {

        try {
            cursor.getString( i );
            columnType = Cursor.FIELD_TYPE_STRING;

        } catch ( Exception ignore1 ) {

            try {
                cursor.getFloat( i );
                columnType = Cursor.FIELD_TYPE_FLOAT;

            } catch ( Exception ignore2 ) {

                try {                                             
                  cursor.getBlob( i );
                  columnType = Cursor.FIELD_TYPE_BLOB;

                } catch ( Exception ignore3 ) {

                     columnType = Cursor.FIELD_TYPE_NULL;
                }
           }
       }
   }

}

Sin embargo, no se lanza ninguna excepción. Los datos siempre se convierten en el primer tipo que está verificando, en este caso getInt (). Eso significa que obtengo los valores correctos si el tipo de columna esEntero pero un0 para todos los demás tipos.

¿Por qué no estoy buscando en la documentación para comprobar qué tipo está almacenado? Las columnas difieren según el fabricante del dispositivo y no todas están documentadas, vea esta pregunta:¿Cómo manejar las diferencias dependientes del fabricante en ContentProviders?

¿Algunas ideas?

Respuestas a la pregunta(4)

Su respuesta a la pregunta