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

Had*_*mir 7 android android-intent android-fragments android-permissions android-settings

试图提出一个我在这里找到的未回答的问题 - 如何突出显示 android 设置应用程序菜单项?

如本视频所示 https://www.youtube.com/watch?v=eHXBc5Mmsqs

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

任何帮助,将不胜感激!

Leo*_*tev 7

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

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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这不再适用于新的三星设备。看起来他们改变了什么?有人知道如何进行这项工作吗? (2认同)

小智 7

适合想要突出显示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
}
Run Code Online (Sandbox Code Playgroud)

许可密钥。 install_other_appsalarms_and_remindersdefault_browserETC。