File reader and streamer component running in its own thread on Android
One synchronise to much :

@Override
public synchronized void disconnect() {
    running = false;
}


You are declaring this synchronised.  So if 2 threads are calling this method, the second one has to wait until the first one is finished.
Because you don't have an input variable, the output will always be the same, setting running false. In this case there are no race conditions what could affect the outcome of this method, so I wouldn't make it synchronised.

private static final :

You are making a great use of the private static final fields.
What I'm not liking is the next step :

String mockFilePath = SAMPLES_SUBDIR + "/" + filename;


Why don't you put the "/" also in the SAMPLES_SUBDIR?

It's the only place where you use this field so it could be easily in the SAMPLES_SUBDIR.

Comments :

While I'm not the first to say you have to document your code, the following case is for me strange :

@Override
public void sendAsciiMessage(CharSequence chars) {
    // do nothing
}


You can do 2 things here.


Throwing a UnsupportedOperationException so the next developer knows, this method you need to override is not supported here.
Putting more comment then do nothing, why doesn't this has to do nothing?  When I read that in a project that I have to take over, I'm thinking maybe TODO but why didn't he put TODO?  So I'll be searching for the why and loosing maybe valuable time over a stupid issue.


All over :

Nice readable code, as an outstander, who doesn't know the things the other classes need to do I still understand what this class has to do.