突出显示系统设置中的菜单项

Posted

技术标签:

【中文标题】突出显示系统设置中的菜单项【英文标题】:Highlighting a menu item in system settings 【发布时间】:2020-11-08 17:41:53 【问题描述】:

试图提出一个我在这里找到的未回答的问题 - How to highlight android setting app menu item?

正如视频中看到的https://www.youtube.com/watch?v=eHXBc5Mmsqs

一旦您进入屏幕,“Power Shade”菜单项就会突出显示。我正在尝试向我的应用程序添加相同的功能,使用此突出显示功能将用户引导至设置菜单中的项目。我似乎找不到任何关于如何实际实现它的信息,也不知道它是否有我可以搜索的特定名称。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

在 Kotlin 中的 Fragment 中,您要检查用户是否已授予您的应用通知访问权限。此代码将向下滚动到列表项并突出显示它。使用三星 S20 设备在 Android 11 上运行。使用 onActivityResult() 或 Fragment 中的新 Activity result API 来检查用户是否确实授予了通知访问权限。

private fun launchNotificationPermissionSettingsPageAndHighlight[your app]() 

        val intent = Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS").apply 
            val [your app] = "$requireContext().packageName/$[your app service]::class.java.name"
            val fragmentKey = ":settings:fragment_args_key"
            val showFragmentKey = ":settings:show_fragment_args"
            putExtra(fragmentKey, [your app])
            putExtra(showFragmentKey, Bundle().apply  putString(fragmentKey, [your app]) )
        

        try 
            startActivityForResult(intent, requestCodeNotificationPermission)
            Toast.makeText(context, "Grant [your app] this permission", LENGTH_LONG).show()
         catch (e: Exception) 
        
    

【讨论】:

嗨@Rvb84,我正在从我的片段中启动以下意图。 val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)。一旦启动,我需要突出显示我的应用程序名称。但是您共享的上述代码不起作用。请帮忙 您好***.com/users/11310951/rvb84,请您就上述请求提供帮助。 [your app service]::class.java.name" 逻辑不适用于 USAGE STATS 意图。因此请指导。 我的回答只适用于这个特定的 ACTION_NOTIFICATION_LISTENER_SETTINGS。如果它也可以用于其他系统设置,您需要做一些研究。它不是官方支持的 API,所以很有可能,您的 ACTION_USAGE_ACCESS_SETTINGS 是不可能的。 嗨@Rvb84 ***.com/users/11310951/rvb84,我真的尽力了,做了所有可能的研究,尝试了所有方法,但我无法实现。自 7 天以来,我一直在为此苦苦挣扎,我日复一日地努力实现它,但没有结果。请你帮我试一次。只有一次或分享任何可以帮助我的东西。这有点紧急和重要。因此寻求帮助。【参考方案2】:

反编译应用程序后,它的工作原理如下(简化):

Intent intent = new Intent("com.samsung.accessibility.installed_service");
if (intent.resolveActivity(context.getPackageManager()) == null) 
    intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);

    
final String EXTRA_FRAGMENT_ARG_KEY = ":settings:fragment_args_key";
final String EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":settings:show_fragment_args";
    
Bundle bundle = new Bundle();
String showArgs = context.getPackageName() + "/" + MyService.class.getName();
bundle.putString(EXTRA_FRAGMENT_ARG_KEY, showArgs);
intent.putExtra(EXTRA_FRAGMENT_ARG_KEY, showArgs);
intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, bundle);
    
try 
    context.startActivity(intent);
    String toastText = "Find PowerShade here";
    Toast.makeText(context, toastText, LENGTH_LONG).show();
 catch (Exception e) 
    // ask user to grant permission manually

基本上它使用了 Android 的未记录功能(请参阅 Android 源代码中的 SettingsActivity.java)。

【讨论】:

SAW 许可是否有类似的东西,也许?从 Android 11 开始,使用 Settings.ACTION_MANAGE_OVERLAY_PERMISSION 将忽略包名称,而是显示可以拥有此权限的所有应用的列表:developer.android.com/reference/android/provider/…。所以也许有一种方法至少可以像这里一样滚动和突出显示? “我的服务”应该是什么?此外,Settings.ACTION_MANAGE_OVERLAY_PERMISSION 的任何解决方案?我在使用 Android 11 时遇到了同样的问题,我想引导用户使用特定的应用程序。 @Kzaf MyService 是您尝试授予权限的服务。不幸的是,我不知道 Android 11 的解决方案 - 只是反编译代码并(几乎)按原样发布。 你如何找到如何为不同的设备执行这些操作? 这不再适用于新的三星设备。看起来他们改变了什么?任何人都知道如何使这项工作?

以上是关于突出显示系统设置中的菜单项的主要内容,如果未能解决你的问题,请参考以下文章

重新加载页面后如何突出显示导航栏中的活动菜单项

保持当前菜单项突出显示

php 突出显示Laravel中的活动菜单项

如何突出显示当前菜单项?

wordpress 中突出显示的多个菜单项

悬停在子菜单上后保持父菜单项突出显示(HTML/CSS/Jquery)