Speech reorganization helper class
Returning boolean

A pattern

    if (condition) return true;
    return false


is to be avoided.

    return condition;


achieves the same in a much more transparent manner. In your case,

    return speechActivities.size() != 0;

Testing vs acquisition

Consider the situation: by the time you call getMicrophoneAvailable it might be available, but later on when your app actually needs it, it's been successfully claimed by some other app.

It means there is no point to test for availability. Acquire it as you need it:

    public static MediaRecorder getMicrophone(Context context) {
        ....
        try {
            recorder.prepare();
        } catch (IOException exception) {
            return null;
        }
        return recorder;
    }