下面列出了android.view.accessibility.AccessibilityManager#sendAccessibilityEvent ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Try to send an {@link AccessibilityEvent}
* for a {@link View}.
*
* @param view The View that will dispatch the AccessibilityEvent
* @return true if the AccessibilityEvent was dispatched
*/
@SuppressWarnings("UnusedReturnValue")
public static boolean sendAccessibilityEvent(View view) {
final AccessibilityManager accessibilityManager = (AccessibilityManager)
view.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (!accessibilityManager.isEnabled()) return false;
final AccessibilityEvent accessibilityEvent = AccessibilityEvent
.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
accessibilityEvent.setClassName(view.getClass().getName());
accessibilityEvent.setPackageName(view.getContext().getPackageName());
view.dispatchPopulateAccessibilityEvent(accessibilityEvent);
accessibilityManager.sendAccessibilityEvent(accessibilityEvent);
return true;
}
/**
* 指定したテキストをTalkBackで読み上げる(TalkBackが有効な場合)
* @param context
* @param text
* @throws IllegalStateException
*/
public static void announceText(@NonNull final Context context,
@Nullable final CharSequence text) throws IllegalStateException {
if (TextUtils.isEmpty(text) || (context == null)) return;
final AccessibilityManager manager
= ContextUtils.requireSystemService(context, AccessibilityManager.class);
if ((manager != null) && manager.isEnabled()) {
final AccessibilityEvent event = AccessibilityEvent.obtain();
if (event != null) {
event.setEventType(AccessibilityEventCompat.TYPE_ANNOUNCEMENT);
event.setClassName(TalkBackHelper.class.getName());
event.setPackageName(context.getPackageName());
event.getText().add(text);
manager.sendAccessibilityEvent(event);
} else {
throw new IllegalStateException("failed to obtain AccessibilityEvent");
}
} else {
throw new IllegalStateException("AccessibilityManager is not available/or disabled");
}
}
/**
* 指定したテキストをTalkBackで読み上げる(TalkBackが有効な場合)
* @param context
* @param text
* @throws IllegalStateException
*/
public static void announceText(@NonNull final Context context,
@Nullable final CharSequence[] text) throws IllegalStateException {
if ((text == null) || (text.length == 0) || (context == null)) return;
final AccessibilityManager manager
= ContextUtils.requireSystemService(context, AccessibilityManager.class);
if ((manager != null) && manager.isEnabled()) {
final AccessibilityEvent event = AccessibilityEvent.obtain();
if (event != null) {
event.setEventType(AccessibilityEventCompat.TYPE_ANNOUNCEMENT);
event.setClassName(TalkBackHelper.class.getName());
event.setPackageName(context.getPackageName());
for (final CharSequence t: text) {
event.getText().add(t);
}
manager.sendAccessibilityEvent(event);
} else {
throw new IllegalStateException("failed to obtain AccessibilityEvent");
}
} else {
throw new IllegalStateException("AccessibilityManager is not available/or disabled");
}
}
private void onScrollStateChange(int scrollState) {
if (mScrollState == scrollState) {
return;
}
mScrollState = scrollState;
if (mOnScrollListener != null) {
mOnScrollListener.onScrollStateChange(this, scrollState);
}
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
AccessibilityManager am = (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (am.isTouchExplorationEnabled()) {
String text = (mDisplayedValues == null) ? formatNumber(mValue) : mDisplayedValues[mValue - mMinValue];
AccessibilityEvent event = AccessibilityEvent.obtain();
event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
event.getText().add(text);
am.sendAccessibilityEvent(event);
}
}
}
public static void makeAnnouncement(View view, CharSequence announcement) {
if (view == null)
return;
if (SUtils.isApi_16_OrHigher()) {
view.announceForAccessibility(announcement);
} else {
// For API 15 and earlier, we need to construct an accessibility event
Context ctx = view.getContext();
AccessibilityManager am = (AccessibilityManager) ctx.getSystemService(
Context.ACCESSIBILITY_SERVICE);
if (!am.isEnabled()) return;
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
AccessibilityRecordCompat arc = AccessibilityEventCompat.asRecord(event);
arc.setSource(view);
event.setClassName(view.getClass().getName());
event.setPackageName(view.getContext().getPackageName());
event.setEnabled(view.isEnabled());
event.getText().add(announcement);
am.sendAccessibilityEvent(event);
}
}
private void onScrollStateChange(int scrollState) {
if (mScrollState == scrollState) {
return;
}
mScrollState = scrollState;
if (mOnScrollListener != null) {
mOnScrollListener.onScrollStateChange(this, scrollState);
}
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
AccessibilityManager am = (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (am.isTouchExplorationEnabled()) {
String text = (mDisplayedValues == null) ? formatNumber(mValue) : mDisplayedValues[mValue - mMinValue];
AccessibilityEvent event = AccessibilityEvent.obtain();
event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
event.getText().add(text);
am.sendAccessibilityEvent(event);
}
}
}
/** As defined in TwoStatePreference source */
void sendAccessibilityEvent(View view) {
// Since the view is still not attached we create, populate,
// and send the event directly since we do not know when it
// will be attached and posting commands is not as clean.
AccessibilityManager accessibilityManager =
(AccessibilityManager)getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager == null)
return;
if (mSendClickAccessibilityEvent && accessibilityManager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain();
event.setEventType(AccessibilityEvent.TYPE_VIEW_CLICKED);
view.onInitializeAccessibilityEvent(event);
view.dispatchPopulateAccessibilityEvent(event);
accessibilityManager.sendAccessibilityEvent(event);
}
mSendClickAccessibilityEvent = false;
}
private void trySendAccessibilityEvent() {
AccessibilityManager accessibilityManager =
AccessibilityManager.getInstance(mView.getContext());
if (!accessibilityManager.isEnabled()) {
return;
}
// treat toasts as notifications since they are used to
// announce a transient piece of information to the user
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
event.setClassName(getClass().getName());
event.setPackageName(mView.getContext().getPackageName());
mView.dispatchPopulateAccessibilityEvent(event);
accessibilityManager.sendAccessibilityEvent(event);
}
public static void sendCustomAccessibilityEvent(View target, int type, String text) {
AccessibilityManager accessibilityManager = (AccessibilityManager)
target.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain(type);
target.onInitializeAccessibilityEvent(event);
event.getText().add(text);
accessibilityManager.sendAccessibilityEvent(event);
}
}
private void sendTapOutsideFolderAccessibilityEvent(boolean isEditingName) {
AccessibilityManager accessibilityManager = (AccessibilityManager)
getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
int stringId = isEditingName ? R.string.folder_tap_to_rename : R.string.folder_tap_to_close;
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_VIEW_FOCUSED);
onInitializeAccessibilityEvent(event);
event.getText().add(getContext().getString(stringId));
accessibilityManager.sendAccessibilityEvent(event);
}
}
private void sendCustomAccessibilityEvent(int type, String text) {
AccessibilityManager accessibilityManager = (AccessibilityManager)
getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain(type);
onInitializeAccessibilityEvent(event);
event.getText().add(text);
accessibilityManager.sendAccessibilityEvent(event);
}
}
private void sendTapOutsideFolderAccessibilityEvent(boolean isEditingName) {
AccessibilityManager accessibilityManager = (AccessibilityManager)
getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
int stringId = isEditingName ? R.string.folder_tap_to_rename : R.string.folder_tap_to_close;
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_VIEW_FOCUSED);
onInitializeAccessibilityEvent(event);
event.getText().add(getContext().getString(stringId));
accessibilityManager.sendAccessibilityEvent(event);
}
}
private void announceScreenDimChanged(int announcementTextResId) {
AccessibilityManager manager =
(AccessibilityManager) service.getSystemService(Context.ACCESSIBILITY_SERVICE);
if (manager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain();
event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
event.setClassName(getClass().getName());
event.setPackageName(service.getPackageName());
event.getText().add(service.getString(announcementTextResId));
manager.sendAccessibilityEvent(event);
}
}
/** Utility method for announcing text via accessibility event. */
public static void announceText(String text, Context context) {
AccessibilityManager accessibilityManager =
(AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT);
event.setContentDescription(text);
accessibilityManager.sendAccessibilityEvent(event);
}
}
/**
* @param view the View to trigger the accessibility event
* @param msg text that will be read aloud (if accessibility enabled)
*/
public static void announceForAccessibility(View view, String msg)
{
if (view != null && msg != null)
{
if (Build.VERSION.SDK_INT >= 16)
{
view.announceForAccessibility(msg);
} else {
Context context = view.getContext();
if (context != null)
{
AccessibilityManager accesibility = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accesibility != null && accesibility.isEnabled())
{
AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_FOCUSED);
event.getText().add(msg);
event.setEnabled(view.isEnabled());
event.setClassName(view.getClass().getName());
event.setPackageName(context.getPackageName());
ViewParent parent = view.getParent();
if (Build.VERSION.SDK_INT >= 14 && parent != null)
{
parent.requestSendAccessibilityEvent(view, event);
} else {
accesibility.sendAccessibilityEvent(event);
}
}
}
}
}
}
private void sendCustomAccessibilityEvent(int type, String text) {
AccessibilityManager accessibilityManager = (AccessibilityManager)
getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
AccessibilityEvent event = AccessibilityEvent.obtain(type);
onInitializeAccessibilityEvent(event);
event.getText().add(text);
accessibilityManager.sendAccessibilityEvent(event);
}
}
private void sendTapOutsideFolderAccessibilityEvent(boolean isEditingName) {
AccessibilityManager accessibilityManager = (AccessibilityManager)
getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
int stringId = isEditingName ? R.string.folder_tap_to_rename : R.string.folder_tap_to_close;
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_VIEW_FOCUSED);
onInitializeAccessibilityEvent(event);
event.getText().add(getContext().getString(stringId));
accessibilityManager.sendAccessibilityEvent(event);
}
}
@Override
public boolean requestSendAccessibilityEvent(
ViewParent parent, View child, AccessibilityEvent event) {
// Emulate what ViewRootImpl does in ICS and above.
if (child == null) {
return false;
}
final AccessibilityManager manager = (AccessibilityManager) child.getContext()
.getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.sendAccessibilityEvent(event);
return true;
}
@Override
public boolean requestSendAccessibilityEvent(
ViewParent parent, View child, AccessibilityEvent event) {
// Emulate what ViewRootImpl does in ICS and above.
if (child == null) {
return false;
}
final AccessibilityManager manager = (AccessibilityManager) child.getContext()
.getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.sendAccessibilityEvent(event);
return true;
}
@Override
public boolean requestSendAccessibilityEvent(
ViewParent parent, View child, AccessibilityEvent event) {
// Emulate what ViewRootImpl does in ICS and above.
if (child == null) {
return false;
}
final AccessibilityManager manager = (AccessibilityManager) child.getContext()
.getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.sendAccessibilityEvent(event);
return true;
}