android-fragments 高亮显示系统设置中的菜单项

gajydyqb  于 2022-11-14  发布在  Android
关注(0)|答案(3)|浏览(154)

试图提出我在此处发现的一个未解答的问题-How to highlight android setting app menu item?
如本视频所示https://www.youtube.com/watch?v=eHXBc5Mmsqs
当你进入屏幕时,“Power Shade”菜单项会被高亮显示。我正在尝试在我的应用程序中添加同样的功能,使用这个高亮显示功能引导用户进入设置菜单中的一个项目。我似乎找不到任何关于如何实际实现这个功能的信息,也不知道它是否有一个具体的名称可以搜索。
任何帮助都将不胜感激!

arknldoa

arknldoa1#

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

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)。

ftf50wuq

ftf50wuq2#

为想要突出显示Settings.ACTION_MANAGE_OVERLAY_PERMISSION或其他权限的人提供的解决方案。AppSettings -> Highlight Permission
Settings.ACTION_MANAGE_OVERLAY_PERMISSION的示例:

private const val EXTRA_FRAGMENT_ARG_KEY = ":settings:fragment_args_key"
private const val EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":settings:show_fragment_args"
private const val EXTRA_SYSTEM_ALERT_WINDOW = "system_alert_window"

fun askForOverlayPermission(context: Context) {
    val intent = Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.parse("package:${context.packageName}")
    ).highlightSettingsTo(EXTRA_SYSTEM_ALERT_WINDOW)
    context.startActivity(intent)
}

private fun Intent.highlightSettingsTo(string: String): Intent {
    putExtra(EXTRA_FRAGMENT_ARG_KEY, string)
    val bundle = bundleOf(EXTRA_FRAGMENT_ARG_KEY to string)
    putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, bundle)
    return this
}

第一个字符串

xt0899hw

xt0899hw3#

在Kotlin中,从您想要检查用户是否已授予您的应用通知访问权限的Fragment中。此代码将向下滚动到列表项并突出显示它。适用于Android 11和Samsung S20设备。使用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) {
        }
    }

相关问题