Locate a mobile phone precisely for indoors tracking
A hybrid approach like the following is probably effective to solving the indoor-positioning problem using smartphones. Here, "hybrid" means that the method would consider estimates from multiple independent sources of position information, each with their own errors. It then uses the various estimates in unison to come up with a narrowed-down position estimate. It finally corrects/refines the estimate further by comparing the estimate with historical/reference data.
(Thus, we are able to refine, first, the precision and, second, the accuracy)

The idea behind my suggested approach is that thanks to sensor-integrated smartphones, there are a host of currently existent sources of data that could be used for position-tracking within a given environment. Each of these methods has limits on its precision or may not function in a given setting, but by putting data from all of them together, a number of advantages (read below) can be derived that allow for a significantly improved position estimate. In addition, a smartphone has strong processing horsepower, which can take advantage of computational methods like Kalman filtering to merge various sets of data in arriving at a conclusive estimate.

Various possible sensors/sources of position information


RF signal strength attenuation: Measure strength of signal with respect to stationary points of transmission (which are placed at various known locations within the given environment). The strengths of signal measured could be that of Wi-fi, Bluetooth, possibly even Zigbee/802.15.4 (some phones). Based on the RSSI, estimate ; the greater the number of stationary transmission points installed, the better of course, but also there are a growing number of, e.g., Wi-Fi hotspots, in public areas, which could be exploited for this purpose.
Accelerometers/Gyro/IMU: Obviously, (most) smartphones have 6-DOF or even 9-DOF setups, so this can be taken advantage of. Dead reckoning is the method used to track these data in accumulating relative changes from a given starting point, thus estimating the current evolved position
Infrared-based trilateration: An Infrared LED (emitter) can be placed on a moving person/object/smartphone, and tracked from an infrared detector/camera. With multiple detectors, trilateration can be used to estimate position (except in cases of occlusion). Several people have researched 3D positioning of an object using two Wiimotes (which have infrared-cameras). Here are various examples.
RFID/NFC/Tag-based check-ins: Whenever a given smartphone/person gets within proximity of a given tag, this contributes some reliable current-position information that can be used, first, as an accurate estimate of current position, but also as a waypoint/calibration for the cumulative error of other methods, such as IMU-based dead-reckoning which operate based on relative movement and thus could benefit from as many reference points as possible. Many smartphones have RFID/NFC capability; and RFID/NFC tags are very inexpensive, so they can be placed at a multitude of strategic spots.
Manual or network-based check-ins: When a person goes to X location, he/she can manually input their location, or there can be auto-detected location marking based on an existent network within the area subset (e.g., a hotspot at a cafe, Foursquare-type checkins).
And others: There are possibly many more other usable sensors/sources (e.g. ultrasonic transmitter-receiver time of flight), some of which may not correspond to sensors currently on smartphones, but could easily be added onto the phone, or as an accessory of the phone, or as a human-wearable piece of electronics. [Other users can perhaps chime in alternate ideas for usable sources of data that are smartphone-integrated, and I can add them onto here.]


Various computational strategies/methods that could used


Proximity network: Maintain real-time measurements of proximity to all nearby moving smartphones/persons, each of whom in turn does the same, thus forming a chain/network with relative-distance information, and use this proximity net to further refine a given person's position estimate. Note that the network may contain some individuals who are ALREADY at or near a precisely-located point/station; thus, the method can benefit from using relative position data in conjunction with absolute or less-noisy position data. (This was just a generic pointer in the sense that more data can never hurt you -- unless you are the processor on that phone running on a small battery! -- but I'm sure there are more creative ways of using the multiple-individual-networked data.)
Reference database: Maintain a database of "reference-data" (similar to Qubulus's use of fingerprints) but step this up a notch by doing so with ALL of the various sensor-datasets described above in relation to their positions. For reference, what I mean by historical data, is the following, very crudely speaking: An experimenter carries his/her smartphone as he/she moves to various positions within the target environment. At these various positions, store data of the various measurements from the sensors listed above. Also, store the coordinates of the actual position itself, measured by the experimenter's manual/human understanding of the geography of the environment. Thus, maintain a database of as many points as possible, each with both the actual position data as well as the corresponding measured readings from each of the various sensors. Repeat multiple times with respect to various times of day, various days of the week, various days of the year, etc. Once compiled, this reference database can be actually used in the normal run-cycle, providing a much refined estimate of a given user's position by taking the user's smartphone's various readings (the ones described earlier), and comparing them against the database.
Feedback mechanisms: Some sort of feedback/calibration could also be integrated for the "reference-database"; e.g., the application on the smartphone could provide some method for users to input their correct position on a map on the smartphone (this could be a voluntary contributive entry by the user, or even integrated into games/other subtle requests for input). This source of position feedback could help keep the reference-database updated, thus accounting for its errors, or for over-time changes in the environment (e.g., relocation of a given fixed RF source), as well as for other phenomena that might be classified as random.
Neural network-based tracking of patterns: One can track movement patterns with respect to sensor readings, e.g., accelerometer-readings: See this Stackexchange post by @Mutant Platypus.
Kalman filtering: Perhaps the most substantial computational ingredient in all of this implementation; such filtering methodology can play a huge role in collaborative use of the data from multiple sensors, in corrections to an estimate, in evolution of a certain set of data versus, etc. See this primer on use of Kalman filters with respect to multiple sensors.