如何在 Android 中启动我的 APP 的辅助功能设置页面?

Posted

技术标签:

【中文标题】如何在 Android 中启动我的 APP 的辅助功能设置页面?【英文标题】:How can I start the Accessibility Settings Page of my APP in Android? 【发布时间】:2015-06-04 16:49:42 【问题描述】:

我正在开发一个基于Accessibility 功能的android APP。由于它不能在 Android 中以编程方式 Enable/Disable Accessibility 服务(参见 How to Programmatically Enable/Disable Accessibility Service in Android),所以我通过下面的代码引导用户到 Accessibility Settings 页面(图 1):

public static boolean gotoAccessibilitySettings(Context context) 
    Intent settingsIntent = new Intent(
            Settings.ACTION_ACCESSIBILITY_SETTINGS);
    if (!(context instanceof Activity)) 
        settingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
    boolean isOk = true;
    try 
        context.startActivity(settingsIntent);
     catch (ActivityNotFoundException e) 
        isOk = false;
    
    return isOk;

然后用户需要找到我的APP的子设置标签,点击它,现在我的APP显示Accessibility Settings页面(图2)。

我怀疑是否可以直接启动我的APP的Accessibility Settings页面(图2)?

【问题讨论】:

您找到解决方案了吗?我为此而疯狂 @kalok 你有解决办法吗? 大家好,有人找到这个解决方案吗?我也有同样的问题 【参考方案1】:

您可以使用以下 Intent 手动打开辅助功能设置(当 android.content.Intentandroid.app.Intent 都已导入时):

Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);

查看以下资源了解更多信息:

https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/accessibility/ClockBackActivity.java http://developer.android.com/reference/android/app/Activity.html

【讨论】:

感谢您的回答,@timgws。但是我的问题是直接打开我自己应用的辅助功能设置,而不是辅助功能设置的主页:( 最终这样做了。在我找到更好的访问页面的方法之前,我只是告诉用户点击我的应用并从设置中启用该服务。【参考方案2】:

也许下面的代码可以帮助你:

Intent intent = new Intent();
        intent.setClassName("com.android.settings",
                "com.android.settings.Settings");
        intent.setAction(Intent.ACTION_MAIN);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK
                | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT,
                "the fragment which you want show");
        intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS,
                extras);
       startActivity(intent);

或者您可以搜索关键词“Fragment Injection”获取更多信息; 查看此链接,它对您的情况很有用:

http://securityintelligence.com/new-vulnerability-android-framework-fragment-injection

【讨论】:

@money zhang 我应该在“你想显示的片段”中输入什么?我想输入我自己的无障碍服务设置.. 我尝试了我的应用程序名称、包名称服务类名称等,而不是“您要显示的片段”。请告诉我应该输入什么? 根据该链接,此方法不再有效,因为该漏洞已在 Android 4.4 Kitkat 中修复【参考方案3】:

试试这个:

Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

【讨论】:

以上是关于如何在 Android 中启动我的 APP 的辅助功能设置页面?的主要内容,如果未能解决你的问题,请参考以下文章

移动应用测试篇——APP测试辅助工具

Android如何打开app内外齿轮vr设备

在 Android App 中使用代码设置启动 Activity

如何在 android 中以编程方式在小米手机安全应用程序中为我的应用程序启用自动启动选项

如何使用 Android Jetpack App 启动库

如何在 Android App 中集成 OpenCV Manager