Watch, Follow, &
Connect with Us

For forums, blogs and more please visit our
Developer Tools Community.


Welcome, Guest
Guest Settings
Help

Thread: Accessibility for Android (screen reader)



Permlink Replies: 4 - Last Post: Sep 20, 2015 2:20 PM Last Post By: Douglas Rudd
Ahmet Nuri DENİZ

Posts: 23
Registered: 6/26/13
Accessibility for Android (screen reader)
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 17, 2015 6:52 AM
Hi we need screen reader function on Android.
If we use Java it is working very nice but. If we use Java 2Op The main screens can not read but the information messages can read.
Our code is

//
// Generated by JavaToPas v1.5 20140918 - 093040
////////////////////////////////////////////////////////////////////////////////
unit android.accessibilityservice.AccessibilityService;

interface

uses
AndroidAPI.JNIBridge,
Androidapi.JNI.JavaTypes,
android.view.accessibility.AccessibilityEvent,
Androidapi.JNI.GraphicsContentViewText,
android.view.accessibility.AccessibilityNodeInfo,
android.accessibilityservice.AccessibilityServiceInfo,
Androidapi.JNI.os,
android.content.ClipData;

type
JAccessibilityService = interface;

JAccessibilityServiceClass = interface(JObjectClass)
['{7C850097-4551-43F8-9A05-EAED5A0E13A2}']
function _GetGESTURE_SWIPE_DOWN : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_DOWN_AND_LEFT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_DOWN_AND_RIGHT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_DOWN_AND_UP : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_LEFT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_LEFT_AND_DOWN : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_LEFT_AND_RIGHT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_LEFT_AND_UP : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_RIGHT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_RIGHT_AND_DOWN : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_RIGHT_AND_LEFT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_RIGHT_AND_UP : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_UP : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_UP_AND_DOWN : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_UP_AND_LEFT : Integer; cdecl; // A: $19
function _GetGESTURE_SWIPE_UP_AND_RIGHT : Integer; cdecl; // A: $19
function _GetGLOBAL_ACTION_BACK : Integer; cdecl; // A: $19
function _GetGLOBAL_ACTION_HOME : Integer; cdecl; // A: $19
function _GetGLOBAL_ACTION_NOTIFICATIONS : Integer; cdecl; // A: $19
function _GetGLOBAL_ACTION_QUICK_SETTINGS : Integer; cdecl; // A: $19
function _GetGLOBAL_ACTION_RECENTS : Integer; cdecl; // A: $19
function _GetSERVICE_INTERFACE : JString; cdecl; // A: $19
function _GetSERVICE_META_DATA : JString; cdecl; // A: $19
function getRootInActiveWindow : JAccessibilityNodeInfo; cdecl; // ()Landroid/view/accessibility/AccessibilityNodeInfo; A: $1
function getServiceInfo : JAccessibilityServiceInfo; cdecl; // ()Landroid/accessibilityservice/AccessibilityServiceInfo; A: $11
function init : JAccessibilityService; cdecl; // ()V A: $1
function onBind(intent : JIntent) : JIBinder; cdecl; // (Landroid/content/Intent;)Landroid/os/IBinder; A: $11
function performGlobalAction(action : Integer) : boolean; cdecl; // (I)Z A: $11
procedure onAccessibilityEvent(JAccessibilityEventparam0 : JAccessibilityEvent) ; cdecl;// (Landroid/view/accessibility/AccessibilityEvent;)V A: $401
procedure onInterrupt ; cdecl; // ()V A: $401
procedure setServiceInfo(info : JAccessibilityServiceInfo) ; cdecl; // (Landroid/accessibilityservice/AccessibilityServiceInfo;)V A: $11
property GESTURE_SWIPE_DOWN : Integer read _GetGESTURE_SWIPE_DOWN; // I A: $19
property GESTURE_SWIPE_DOWN_AND_LEFT : Integer read _GetGESTURE_SWIPE_DOWN_AND_LEFT;// I A: $19
property GESTURE_SWIPE_DOWN_AND_RIGHT : Integer read _GetGESTURE_SWIPE_DOWN_AND_RIGHT;// I A: $19
property GESTURE_SWIPE_DOWN_AND_UP : Integer read _GetGESTURE_SWIPE_DOWN_AND_UP;// I A: $19
property GESTURE_SWIPE_LEFT : Integer read _GetGESTURE_SWIPE_LEFT; // I A: $19
property GESTURE_SWIPE_LEFT_AND_DOWN : Integer read _GetGESTURE_SWIPE_LEFT_AND_DOWN;// I A: $19
property GESTURE_SWIPE_LEFT_AND_RIGHT : Integer read _GetGESTURE_SWIPE_LEFT_AND_RIGHT;// I A: $19
property GESTURE_SWIPE_LEFT_AND_UP : Integer read _GetGESTURE_SWIPE_LEFT_AND_UP;// I A: $19
property GESTURE_SWIPE_RIGHT : Integer read _GetGESTURE_SWIPE_RIGHT; // I A: $19
property GESTURE_SWIPE_RIGHT_AND_DOWN : Integer read _GetGESTURE_SWIPE_RIGHT_AND_DOWN;// I A: $19
property GESTURE_SWIPE_RIGHT_AND_LEFT : Integer read _GetGESTURE_SWIPE_RIGHT_AND_LEFT;// I A: $19
property GESTURE_SWIPE_RIGHT_AND_UP : Integer read _GetGESTURE_SWIPE_RIGHT_AND_UP;// I A: $19
property GESTURE_SWIPE_UP : Integer read _GetGESTURE_SWIPE_UP; // I A: $19
property GESTURE_SWIPE_UP_AND_DOWN : Integer read _GetGESTURE_SWIPE_UP_AND_DOWN;// I A: $19
property GESTURE_SWIPE_UP_AND_LEFT : Integer read _GetGESTURE_SWIPE_UP_AND_LEFT;// I A: $19
property GESTURE_SWIPE_UP_AND_RIGHT : Integer read _GetGESTURE_SWIPE_UP_AND_RIGHT;// I A: $19
property GLOBAL_ACTION_BACK : Integer read _GetGLOBAL_ACTION_BACK; // I A: $19
property GLOBAL_ACTION_HOME : Integer read _GetGLOBAL_ACTION_HOME; // I A: $19
property GLOBAL_ACTION_NOTIFICATIONS : Integer read _GetGLOBAL_ACTION_NOTIFICATIONS;// I A: $19
property GLOBAL_ACTION_QUICK_SETTINGS : Integer read _GetGLOBAL_ACTION_QUICK_SETTINGS;// I A: $19
property GLOBAL_ACTION_RECENTS : Integer read _GetGLOBAL_ACTION_RECENTS; // I A: $19
property SERVICE_INTERFACE : JString read _GetSERVICE_INTERFACE; // Ljava/lang/String; A: $19
property SERVICE_META_DATA : JString read _GetSERVICE_META_DATA; // Ljava/lang/String; A: $19
end;

[JavaSignature('android/accessibilityservice/AccessibilityService')]
JAccessibilityService = interface(JObject)
['{F5E3BC7A-36DC-48EA-9F5F-99DC1ADC5F59}']
function getRootInActiveWindow : JAccessibilityNodeInfo; cdecl; // ()Landroid/view/accessibility/AccessibilityNodeInfo; A: $1
procedure onAccessibilityEvent(JAccessibilityEventparam0 : JAccessibilityEvent) ; cdecl;// (Landroid/view/accessibility/AccessibilityEvent;)V A: $401
procedure onInterrupt ; cdecl; // ()V A: $401
end;

TJAccessibilityService = class(TJavaGenericImport<JAccessibilityServiceClass, JAccessibilityService>)
end;

const
TJAccessibilityServiceGESTURE_SWIPE_UP = 1;
TJAccessibilityServiceGESTURE_SWIPE_DOWN = 2;
TJAccessibilityServiceGESTURE_SWIPE_LEFT = 3;
TJAccessibilityServiceGESTURE_SWIPE_RIGHT = 4;
TJAccessibilityServiceGESTURE_SWIPE_LEFT_AND_RIGHT = 5;
TJAccessibilityServiceGESTURE_SWIPE_RIGHT_AND_LEFT = 6;
TJAccessibilityServiceGESTURE_SWIPE_UP_AND_DOWN = 7;
TJAccessibilityServiceGESTURE_SWIPE_DOWN_AND_UP = 8;
TJAccessibilityServiceGESTURE_SWIPE_LEFT_AND_UP = 9;
TJAccessibilityServiceGESTURE_SWIPE_LEFT_AND_DOWN = 10;
TJAccessibilityServiceGESTURE_SWIPE_RIGHT_AND_UP = 11;
TJAccessibilityServiceGESTURE_SWIPE_RIGHT_AND_DOWN = 12;
TJAccessibilityServiceGESTURE_SWIPE_UP_AND_LEFT = 13;
TJAccessibilityServiceGESTURE_SWIPE_UP_AND_RIGHT = 14;
TJAccessibilityServiceGESTURE_SWIPE_DOWN_AND_LEFT = 15;
TJAccessibilityServiceGESTURE_SWIPE_DOWN_AND_RIGHT = 16;
TJAccessibilityServiceSERVICE_INTERFACE = 'android.accessibilityservice.AccessibilityService';
TJAccessibilityServiceSERVICE_META_DATA = 'android.accessibilityservice';
TJAccessibilityServiceGLOBAL_ACTION_BACK = 1;
TJAccessibilityServiceGLOBAL_ACTION_HOME = 2;
TJAccessibilityServiceGLOBAL_ACTION_RECENTS = 3;
TJAccessibilityServiceGLOBAL_ACTION_NOTIFICATIONS = 4;
TJAccessibilityServiceGLOBAL_ACTION_QUICK_SETTINGS = 5;

implementation

end.

///////////////////////////////////////////////////


// infofile

//
// Generated by JavaToPas v1.5 20140918 - 093040
////////////////////////////////////////////////////////////////////////////////
unit android.accessibilityservice.AccessibilityServiceInfo;

interface

uses
AndroidAPI.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.os,
android.content.pm.ResolveInfo,
Androidapi.JNI.GraphicsContentViewText;

type
JAccessibilityServiceInfo = interface;

JAccessibilityServiceInfoClass = interface(JObjectClass)
['{2D41EFC4-F426-4B3C-8E12-55F2E263A75E}']
function _GetCAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY : Integer; cdecl;// A: $19
function _GetCAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS : Integer; cdecl; // A: $19
function _GetCAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION : Integer; cdecl; // A: $19
function _GetCAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT : Integer; cdecl; // A: $19
function _GetCREATOR : JParcelable_Creator; cdecl; // A: $19
function _GetDEFAULT : Integer; cdecl; // A: $19
function _GetFEEDBACK_ALL_MASK : Integer; cdecl; // A: $19
function _GetFEEDBACK_AUDIBLE : Integer; cdecl; // A: $19
function _GetFEEDBACK_BRAILLE : Integer; cdecl; // A: $19
function _GetFEEDBACK_GENERIC : Integer; cdecl; // A: $19
function _GetFEEDBACK_HAPTIC : Integer; cdecl; // A: $19
function _GetFEEDBACK_SPOKEN : Integer; cdecl; // A: $19
function _GetFEEDBACK_VISUAL : Integer; cdecl; // A: $19
function _GetFLAG_INCLUDE_NOT_IMPORTANT_VIEWS : Integer; cdecl; // A: $19
function _GetFLAG_REPORT_VIEW_IDS : Integer; cdecl; // A: $19
function _GetFLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY : Integer; cdecl; // A: $19
function _GetFLAG_REQUEST_FILTER_KEY_EVENTS : Integer; cdecl; // A: $19
function _GetFLAG_REQUEST_TOUCH_EXPLORATION_MODE : Integer; cdecl; // A: $19
function _GeteventTypes : Integer; cdecl; // A: $1
function _GetfeedbackType : Integer; cdecl; // A: $1
function _Getflags : Integer; cdecl; // A: $1
function _GetnotificationTimeout : Int64; cdecl; // A: $1
function _GetpackageNames : TJavaArray<JString>; cdecl; // A: $1
function capabilityToString(capability : Integer) : JString; cdecl; // (I)Ljava/lang/String; A: $9
function describeContents : Integer; cdecl; // ()I A: $1
function equals(obj : JObject) : boolean; cdecl; // (Ljava/lang/Object;)Z A: $1
function feedbackTypeToString(feedbackType : Integer) : JString; cdecl; // (I)Ljava/lang/String; A: $9
function flagToString(flag : Integer) : JString; cdecl; // (I)Ljava/lang/String; A: $9
function getCanRetrieveWindowContent : boolean; deprecated; cdecl; // ()Z A: $1
function getCapabilities : Integer; cdecl; // ()I A: $1
function getDescription : JString; deprecated; cdecl; // ()Ljava/lang/String; A: $1
function getId : JString; cdecl; // ()Ljava/lang/String; A: $1
function getResolveInfo : JResolveInfo; cdecl; // ()Landroid/content/pm/ResolveInfo; A: $1
function getSettingsActivityName : JString; cdecl; // ()Ljava/lang/String; A: $1
function hashCode : Integer; cdecl; // ()I A: $1
function init : JAccessibilityServiceInfo; cdecl; // ()V A: $1
function loadDescription(packageManager : JPackageManager) : JString; cdecl;// (Landroid/content/pm/PackageManager;)Ljava/lang/String; A: $1
function toString : JString; cdecl; // ()Ljava/lang/String; A: $1
procedure _SeteventTypes(Value : Integer) ; cdecl; // A: $1
procedure _SetfeedbackType(Value : Integer) ; cdecl; // A: $1
procedure _Setflags(Value : Integer) ; cdecl; // A: $1
procedure _SetnotificationTimeout(Value : Int64) ; cdecl; // A: $1
procedure _SetpackageNames(Value : TJavaArray<JString>) ; cdecl; // A: $1
procedure writeToParcel(parcel : JParcel; flagz : Integer) ; cdecl; // (Landroid/os/Parcel;I)V A: $1
property &DEFAULT : Integer read _GetDEFAULT; // I A: $19
property CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY : Integer read _GetCAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY;// I A: $19
property CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS : Integer read _GetCAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS;// I A: $19
property CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION : Integer read _GetCAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION;// I A: $19
property CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT : Integer read _GetCAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT;// I A: $19
property CREATOR : JParcelable_Creator read _GetCREATOR; // Landroid/os/Parcelable$Creator; A: $19
property FEEDBACK_ALL_MASK : Integer read _GetFEEDBACK_ALL_MASK; // I A: $19
property FEEDBACK_AUDIBLE : Integer read _GetFEEDBACK_AUDIBLE; // I A: $19
property FEEDBACK_BRAILLE : Integer read _GetFEEDBACK_BRAILLE; // I A: $19
property FEEDBACK_GENERIC : Integer read _GetFEEDBACK_GENERIC; // I A: $19
property FEEDBACK_HAPTIC : Integer read _GetFEEDBACK_HAPTIC; // I A: $19
property FEEDBACK_SPOKEN : Integer read _GetFEEDBACK_SPOKEN; // I A: $19
property FEEDBACK_VISUAL : Integer read _GetFEEDBACK_VISUAL; // I A: $19
property FLAG_INCLUDE_NOT_IMPORTANT_VIEWS : Integer read _GetFLAG_INCLUDE_NOT_IMPORTANT_VIEWS;// I A: $19
property FLAG_REPORT_VIEW_IDS : Integer read _GetFLAG_REPORT_VIEW_IDS; // I A: $19
property FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY : Integer read _GetFLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY;// I A: $19
property FLAG_REQUEST_FILTER_KEY_EVENTS : Integer read _GetFLAG_REQUEST_FILTER_KEY_EVENTS;// I A: $19
property FLAG_REQUEST_TOUCH_EXPLORATION_MODE : Integer read _GetFLAG_REQUEST_TOUCH_EXPLORATION_MODE;// I A: $19
property eventTypes : Integer read _GeteventTypes write _SeteventTypes; // I A: $1
property feedbackType : Integer read _GetfeedbackType write _SetfeedbackType;// I A: $1
property flags : Integer read _Getflags write _Setflags; // I A: $1
property notificationTimeout : Int64 read _GetnotificationTimeout write _SetnotificationTimeout;// J A: $1
property packageNames : TJavaArray<JString> read _GetpackageNames write _SetpackageNames;// [Ljava/lang/String; A: $1
end;

[JavaSignature('android/accessibilityservice/AccessibilityServiceInfo')]
JAccessibilityServiceInfo = interface(JObject)
['{6D73BCDE-354D-48E3-B901-F43E2DFF5C98}']
function _GeteventTypes : Integer; cdecl; // A: $1
function _GetfeedbackType : Integer; cdecl; // A: $1
function _Getflags : Integer; cdecl; // A: $1
function _GetnotificationTimeout : Int64; cdecl; // A: $1
function _GetpackageNames : TJavaArray<JString>; cdecl; // A: $1
function describeContents : Integer; cdecl; // ()I A: $1
function equals(obj : JObject) : boolean; cdecl; // (Ljava/lang/Object;)Z A: $1
function getCanRetrieveWindowContent : boolean; deprecated; cdecl; // ()Z A: $1
function getCapabilities : Integer; cdecl; // ()I A: $1
function getDescription : JString; deprecated; cdecl; // ()Ljava/lang/String; A: $1
function getId : JString; cdecl; // ()Ljava/lang/String; A: $1
function getResolveInfo : JResolveInfo; cdecl; // ()Landroid/content/pm/ResolveInfo; A: $1
function getSettingsActivityName : JString; cdecl; // ()Ljava/lang/String; A: $1
function hashCode : Integer; cdecl; // ()I A: $1
function loadDescription(packageManager : JPackageManager) : JString; cdecl;// (Landroid/content/pm/PackageManager;)Ljava/lang/String; A: $1
function toString : JString; cdecl; // ()Ljava/lang/String; A: $1
procedure _SeteventTypes(Value : Integer) ; cdecl; // A: $1
procedure _SetfeedbackType(Value : Integer) ; cdecl; // A: $1
procedure _Setflags(Value : Integer) ; cdecl; // A: $1
procedure _SetnotificationTimeout(Value : Int64) ; cdecl; // A: $1
procedure _SetpackageNames(Value : TJavaArray<JString>) ; cdecl; // A: $1
procedure writeToParcel(parcel : JParcel; flagz : Integer) ; cdecl; // (Landroid/os/Parcel;I)V A: $1
property eventTypes : Integer read _GeteventTypes write _SeteventTypes; // I A: $1
property feedbackType : Integer read _GetfeedbackType write _SetfeedbackType;// I A: $1
property flags : Integer read _Getflags write _Setflags; // I A: $1
property notificationTimeout : Int64 read _GetnotificationTimeout write _SetnotificationTimeout;// J A: $1
property packageNames : TJavaArray<JString> read _GetpackageNames write _SetpackageNames;// [Ljava/lang/String; A: $1
end;

TJAccessibilityServiceInfo = class(TJavaGenericImport<JAccessibilityServiceInfoClass, JAccessibilityServiceInfo>)
end;

const
TJAccessibilityServiceInfoCAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1;
TJAccessibilityServiceInfoCAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2;
TJAccessibilityServiceInfoCAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4;
TJAccessibilityServiceInfoCAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8;
TJAccessibilityServiceInfoFEEDBACK_SPOKEN = 1;
TJAccessibilityServiceInfoFEEDBACK_HAPTIC = 2;
TJAccessibilityServiceInfoFEEDBACK_AUDIBLE = 4;
TJAccessibilityServiceInfoFEEDBACK_VISUAL = 8;
TJAccessibilityServiceInfoFEEDBACK_GENERIC = 16;
TJAccessibilityServiceInfoFEEDBACK_BRAILLE = 32;
TJAccessibilityServiceInfoFEEDBACK_ALL_MASK = -1;
TJAccessibilityServiceInfoDEFAULT = 1;
TJAccessibilityServiceInfoFLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2;
TJAccessibilityServiceInfoFLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4;
TJAccessibilityServiceInfoFLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8;
TJAccessibilityServiceInfoFLAG_REPORT_VIEW_IDS = 16;
TJAccessibilityServiceInfoFLAG_REQUEST_FILTER_KEY_EVENTS = 32;

implementation

end.

Edited by: Ahmet Nuri DENİZ on Sep 17, 2015 6:52 AM

Eli M

Posts: 1,346
Registered: 11/9/13
Re: Accessibility for Android (screen reader)
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 17, 2015 8:01 PM   in response to: Ahmet Nuri DENİZ in response to: Ahmet Nuri DENİZ
What's the question?

Basically Firemonkey draws all it's own controls via OpenGL so the native Android functionality may not work against it.

There is a framework for Firemonkey called DPF Android that gives you access to the native Android controls which it may work against.

http://sourceforge.net/projects/dpfdelphiandroid/
Ahmet Nuri DENİZ

Posts: 23
Registered: 6/26/13
Re: Accessibility for Android (screen reader)
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 20, 2015 2:33 AM   in response to: Eli M in response to: Eli M
The question is
how we can use screen reader function on Android device?

Eli M wrote:
What's the question?

Gilbert Padilla

Posts: 315
Registered: 3/8/04
Re: Accessibility for Android (screen reader)
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 20, 2015 8:57 AM   in response to: Ahmet Nuri DENİZ in response to: Ahmet Nuri DENİZ
"Ahmet Nuri DENİZ" wrote in message :

The question is
how we can use screen reader function on Android device?

That is TTS or Text to Speech:

https://github.com/jimmckeeth/FireMonkey-Android-Voice

http://www.fmxexpress.com/text-to-speech-tts-wrapper-for-android-with-delphi-xe5-firemonkey/
Douglas Rudd

Posts: 314
Registered: 5/16/97
Re: Accessibility for Android (screen reader)
Click to report abuse...   Click to reply to this thread Reply
  Posted: Sep 20, 2015 2:20 PM   in response to: Ahmet Nuri DENİZ in response to: Ahmet Nuri DENİZ
Embarcadero has the FireMonkey Accessibility Pack Library that supports the JAWS screen reader on Windows and the VoiceOver screen reader on Mac OSX.

Thats not Android but maybe you can get some hints from it.

I like the idea of the Text-to-Speech libraries. That way you could control what you want the voice to tell the sight impaired person. Probably better than something that just reads the captions off the buttons.
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02