【Android】SettingsPreferenceService
一,概述
AndroidSDK36平台,新增了SettingsPreferenceService类,位于SDK中android.service.settings.preferences下,主要作用是提供系统应用对系统设置的交互,包括读取、设置系统设置的偏好能力。
整体架构图如下
该功能组件如下,采用CS架构,通过binder实现与设置的通信
客户端API集成在SettingsPreferenceServiceClient类中,目前提供了三个公开接口,
服务端抽象基类SettingsPreferencceService由系统设置实现,实现路径在aosp/packages/apps/Settings/src/com/android/settings/service下,Androidmanifest声明如下
服务端实现,是通过注解处理器,在Settings编译时,生成辅助类,随后通过*ValueRequest相关参数定位到具体偏好页面,即完成一次偏好读取|设置事务。
二,实例
以下是一个简单的实例,当绑定Service成功后,调用getAllPreferenceMetadata获取所有偏好信息,并且显示在List中,
package com.example.myapplication;import static android.service.settings.preferences.SettingsPreferenceValue.TYPE_BOOLEAN;import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.OutcomeReceiver;
import android.service.settings.preferences.GetValueRequest;
import android.service.settings.preferences.GetValueResult;
import android.service.settings.preferences.MetadataRequest;
import android.service.settings.preferences.MetadataResult;
import android.service.settings.preferences.SetValueRequest;
import android.service.settings.preferences.SetValueResult;
import android.service.settings.preferences.SettingsPreferenceMetadata;
import android.service.settings.preferences.SettingsPreferenceServiceClient;
import android.service.settings.preferences.SettingsPreferenceValue;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.activity.ComponentActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.util.Consumer;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;@SuppressLint("NewApi")
public class SettingsPreferenceServiceDemoActivity extends ComponentActivity {private static final String TAG = "SettingsPreferenceServiceDemoActivity";private boolean isConnect = false;private ExecutorServi