I'm just thinking out loud, and I haven't played with the android accelerometer API yet, so bear with me.
First of all, traditionally for navigation from accelerometers you will need a 6-axis accelerometer. You need accelerations in X, Y and Z, but also rotations of Xr, Yr and Zr. Without rotation data, you don’t have enough data to set the vector, unless you assume that the device never changes its attitude, which would be pretty restrictive. In any case, no one reads TOS.
Oh, and you know that the INS drifts with the rotation of the earth, right? So that too. After an hour, you mysteriously climb a 15 ° slope into space. Suppose you have an INS that can maintain a location for a long time that the phone still cannot do.
The best way to use accelerometers — even with a 3-axis accelerometer — for navigation is to use GPS to calibrate your INS whenever possible. Where GPS drops, INS complements well. GPS can suddenly shoot 3 blocks because you are too close to a tree. INS is not great, but at least it knows that you have not been hit by a meteor.
What you can do is register phone accelerometer data and much more. Like weeks. Compare this to the good (I mean really good) GPS data and use datamining to correlate trends between accelerometer data and known GPS data. (Pro tip: you want to check the GPS almanac for several days with good geometry and lots of satellites. On some days you can only have 4 satellites, and that’s not enough). What you can do is to find when a person is walking with his phone in his pocket, accelerometer data records a very specific pattern. Based on the data, you set the profile for this device with this user and what speed is the model when it has GPS data to go with it. You should be able to detect turns, climb stairs, sit down (calibration to 0 speeds!) And various other tasks. The way the phone is held must be fully processed as separate data. I smell the neural network used for data mining. In other words, something is blind than the input means. The algorithm will only look for trends in patterns and ignore actual INS measurements. All he knew was historically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now. And that would move the piece forward accordingly. It is important that it is completely blind, because just putting the phone in your pocket can be oriented in one of 4 different orientations and 8 if you switch pockets. And there are many ways to hold the phone. We are talking a lot of data here.
You will obviously still have a lot of drift, but I think you will be so lucky because the device will know when you stop walking and the positional drift will not perpetuate. He knows that you are standing on historical data. Traditional INS systems do not have this feature. Drift perpetuates all future dimensions and connections exponentially. Incorrect accuracy or regular checking at regular intervals is absolutely important for traditional INS.
Each device and each person must have their own profile. This is a lot of data and a lot of calculations. Everyone walks at different speeds, with different steps, and put their phones in different pockets, etc. Of course, to implement this in the real world for server-side processing, you need to process the number-crunch.
If you used GPS for the initial baseline, part of the problem is GPS, as a rule, has its own migrations over time, but they are non-repeating errors. Sit in the receiver in one place and register the data. If there are no WAAS corrections, you can easily get location corrections by moving in random directions 100 feet around you. With WAAS, maybe up to 6 feet. In fact, you might be lucky with the RTK system with a submeter on your backpack to at least get the ANN algorithm.
You will still have angular drift using INS using my method. This is problem. But if you went so far as to build ANN, to pour GPS and INS data in a few weeks among Russian users, and in fact it has worked so far, you obviously are not against big data. Continue along this path and use more data to help resolve angular drift: People are habits. To a large extent, we do the same things as walking along the sidewalks, through doors, up stairs and don’t do crazy things, such as motorway walks, through walls or from balconies.
So, let's say you take a page from Big Brother and start storing data about where people are going. You can start mapping where people will walk. This is a pretty confident bet that if the user starts to climb the stairs, she is on the same stairs as in front of her. After 1000 iterations and some least squares settings, your database pretty much knows where these stairs are with great accuracy. Now you can fix the angular drift and location when a person begins to walk. When she hits this staircase or turns off this hall or moves along the sidewalk, any drift can be fixed. Your database will contain sectors weighted by the probability that a person will go there or that this user has gone there in the past. Spatial databases are optimized for this, using divide and conquer to select only those sectors that make sense. It would be like those MIT projects where a laser-equipped robot starts with a black image and draws a labyrinth in memory, making every turn that illuminates where all the walls are.
Areas of high traffic will receive higher weights and areas where no one has ever gained 0 weights. Higher traffic areas have higher resolution. You would essentially have to get the map wherever it is and use it as a forecasting model.
I will not be surprised if you can determine what place a person took in the theater using this method. Given the sufficient number of users going to the theater and the sufficient resolution, you will have data displaying each row of the theater, and how wide each row is. The more people visit the place, the higher the accuracy with which you could predict that this person is.
In addition, I highly recommend that you get a (free) subscription to GPS World magazine if you are interested in ongoing research on these kinds of things. Every month I go out with him.