Android跳转系统Settings界面

Quibbler 1月前 149

Android跳转系统Settings界面


        当应用没有权限、没有打开通知等情况时,需要引导用户跳转到对应的系统设置界面手动操作。Settings提供了丰富的ACTION_跳转设置界面,让我们来看一下。

        以Android refs/tags/android-14.0.0_r66为例,设置源码中ACTION_共110个:

        hide和system ACTION_有15个,普通应用无法跳转

        其79个设置跳转ACTION_不需要带package,若携带Uri跳转反而会报错

        16个ACTION_需要带package启动,这其中又有7个ACTION_可带可不带package均可跳转(跳转效果不同)。



1、带package启动设置界面

        比如跳转应用信息设置界面,通过ACTION_APPLICATION_DETAILS_SETTINGS跳转:

    val uri = Uri.parse("package:$packageName")
    val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS ,uri)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 
    startActivity(intent)

        如果用不带包含package信息的Intent启动:

    val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 
    startActivity(intent)

        则启动会报错,找不到对应界面:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS flg=0x10000000 }

        需要携带package指定打开哪个应用的应用信息界面。而有些ACTION_的跳转如果带了package反而无法跳转,这个需要开发者阅读源码注释说明。



2、不带package启动设置界面

        绝大多数ACTION_都是不需要带package信息启动的:

    val intent = Intent(Settings.ACTION_ALL_APPS_NOTIFICATION_SETTINGS)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 
    startActivity(intent)

        除非源码中有指定说明要带package信息启动:“The Intent's data URI specifies the application package name to be shown, with the "package" scheme.”

    /**
     * Activity Action: Show the "Open by Default" page in a particular application's details page.
     * <p>
     * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
     * <p>
     * Input: The Intent's data URI specifies the application package name
     * to be shown, with the "package" scheme. That is "package:com.my.app".
     * <p>
     * Output: Nothing.
     */
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_APP_OPEN_BY_DEFAULT_SETTINGS =
            "android.settings.APP_OPEN_BY_DEFAULT_SETTINGS";



3、常用系统设置ACTION

        系统设置Settings中定义的一些常用的界面ACTION_常量如下:

ACTION界面
ACTION_SETTINGS系统设置界面
ACTION_APN_SETTINGSAPN设置界面
ACTION_LOCATION_SOURCE_SETTINGS定位设置界面
ACTION_AIRPLANE_MODE_SETTINGS更多连接方式设置界面
ACTION_DATA_ROAMING_SETTINGS双卡和移动网络设置界面
ACTION_ACCESSIBILITY_SETTINGS无障碍设置界面/辅助功能界面
ACTION_SYNC_SETTINGS同步设置界面
ACTION_ADD_ACCOUNT添加账户界面
ACTION_NETWORK_OPERATOR_SETTINGS选取运营商的界面
ACTION_SECURITY_SETTINGS安全设置界面
ACTION_PRIVACY_SETTINGS备份重置设置界面
ACTION_VPN_SETTINGSVPN设置界面,可能不存在
ACTION_WIFI_SETTINGS无线网设置界面
ACTION_WIFI_IP_SETTINGSWIFI的IP设置
ACTION_BLUETOOTH_SETTINGS蓝牙设置
ACTION_CAST_SETTINGS投射设置
ACTION_DATE_SETTINGS日期时间设置
ACTION_SOUND_SETTINGS声音设置
ACTION_DISPLAY_SETTINGS显示设置
ACTION_LOCALE_SETTINGS语言设置
ACTION_VOICE_INPUT_SETTINGS辅助应用和语音输入设置
ACTION_INPUT_METHOD_SETTINGS语言和输入法设置
ACTION_USER_DICTIONARY_SETTINGS个人字典设置界面
ACTION_INTERNAL_STORAGE_SETTINGS存储空间设置的界面
ACTION_SEARCH_SETTINGS搜索设置界面
ACTION_APPLICATION_DEVELOPMENT_SETTINGS开发者选项
ACTION_DEVICE_INFO_SETTINGS手机状态信息的界面
ACTION_DREAM_SETTINGS互动屏保设置的界面
ACTION_NOTIFICATION_LISTENER_SETTINGS通知使用权设置的界面
ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS勿扰权限设置的界面
ACTION_CAPTIONING_SETTINGS字幕设置的界面
ACTION_PRINT_SETTINGS打印设置界面
ACTION_BATTERY_SAVER_SETTINGS节电助手界面
ACTION_HOME_SETTINGS主屏幕设置界面
ACTION_APPLICATION_DETAILS_SETTINGS根据包名跳转到系统自带的应用程序信息
ACTION_APPLICATION_SETTINGS应用程序列表
ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS应用程序界面【所有的】
ACTION_MANAGE_APPLICATIONS_SETTINGS应用程序列表界面【已安装的】
ACTION_INPUT_METHOD_SUBTYPE_SETTINGS【API 11及以上】语言选择界面 【多国语言选择】
ACTION_NFCSHARING_SETTINGS显示NFC共享设置【API 14及以上】
ACTION_NFC_SETTINGS显示NFC设置【API 16及以上】
ACTION_QUICK_LAUNCH_SETTINGS快速启动设置界面


        可以优先携带package信息进行跳转,可先通过queryIntentActivities()查询是否可以跳转打开,如果不能则去掉package信息。

    val uri = Uri.parse("package:$packageName")
    val intent = Intent(action, uri)
    if (packageManager.queryIntentActivities(intent, 0).size != 0) {
	startActivity(intent)
    } else {
	intent.setData(null)
	startActivity(intent)
    }

        有些ACTION_可带可不带package跳转,带和不带package跳转的效果或界面不一样,比如ACTION_USAGE_ACCESS_SETTINGS,带package打开详细某个应用的界面:


        不带package则打开的是包含全部应用的使用情况访问权限界面:



不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com