Android System Manager API

2021-02-03  本文已影响0人  Itachi001
public static IActivityTaskManager getService() {
    return IActivityTaskManagerSingleton.get();
}

IActivityTaskManager 其实是一个 Binder 对象,负责应用和 ActivityTaskManagerService 直接的通信。它有以下方法:

//为特定的任务设置窗口模式
setTaskWindowingMode()

//屏幕固定与取消
startSystemLockTaskMode()
stopSystemLockTaskMode()

//将指定taskId的task移到指定stackId的栈:
moveTaskToStack()

//将栈顶Activity移到指定stackId的栈:
moveTopActivityToPinnedStack()

//将Task移动分屏栈
setTaskWindowingModeSplitScreenPrimary()

//从指定windowingMode的窗口模式的中移除ActivityType为STANDARD或UNDEFINED类型的栈
removeStacksInWindowingModes()

//根据ActivityTypes移除栈
removeStacksWithActivityTypes()

//获取最近Task的最大数量
getMaxRecentTasksStatic()

//获取应用最近Task的最大数量限制
getMaxAppRecentsLimitStatic()

//获取默认最近Task的最大数量限制
getDefaultAppRecentsLimitStatic()

//如果系统至少支持一种形式的多窗口,则返回true。例如自由格式、分屏、画中画。
supportsMultiWindow()

//如果系统支持分屏多窗口,则返回true
supportsSplitScreenMultiWindow()

//列出所有activity的栈信息
listAllStacks()

//移除所有可见最近Task
removeAllVisibleRecentTasks()

//清除给定包的启动参数
clearLaunchParamsForPackages()

//将指定displayId的Task显示为Instance
setDisplayToSingleTaskInstance()

//调整栈的大小:
resizeStack()
resizeDockedStack()

//调整Task大小:
resizeTask()
val inputManager = getSystemService(Context.INPUT_SERVICE) as InputManager
//获取Input设备ID
inputManager.inputDeviceIds
//根据ID获取Input设备
inputManager.getInputDevice()
val listener =object :InputManager.InputDeviceListener{
        override fun onInputDeviceAdded(deviceId: Int) {
        }

        override fun onInputDeviceRemoved(deviceId: Int) {
        }

        override fun onInputDeviceChanged(deviceId: Int) {
        }
}
//注册Input设备状态监听
inputManager.registerInputDeviceListener(listener, Handler())
//取消注册Input设备状态监听
inputManager.unregisterInputDeviceListener(listener)
//验证系统更新包的密码签名
verifyPackage()

//验证InputStream的兼容性信息
verifyPackageCompatibility(InputStream)

//验证系统更新包的兼容性信息
verifyPackageCompatibility(File)

//使用uncrypt处理给定的包
processPackage()

//重启到Recovery以安装给定的更新包
installPackage()

//安排在下一次引导时安装给定的包
scheduleUpdateOnBoot()

//通过清除BCB(引导加载程序控制块)取消任何预定的更新
cancelScheduledUpdate()

//重启到Recovery以擦除用户数据和缓存分区
rebootWipeUserData()

//重启到Recovery以擦除缓存分区
rebootWipeCache()

//重启到Recovery以擦除A/B设备。
rebootWipeAb()

//返回清除Euicc数据是否成功
wipeEuiccData()

//利用RecoverySystemService通过Binder设置BCB命令并重启到相应的Recovery
rebootRecoveryWithCommand()

//使用提供的参数重新引导到Recovery
bootCommand()
/**
将一个帐号直接存储到AccountManager
*/
public boolean addAccountExplicitly(Account account, String password, Bundle userdata) 
/**
获取account的password(不一定是真实的用户密码,看authenticator app的存储)
*/
public String getPassword(final Account account);
/**
重置该account的password
注意:调用这个方法会清除该账号所有authToken在AccountManager中的缓存
*/
public void setPassword(final Account account, final String password) ;
/**
清除account的password
注意: 调用这个方法会清除该账号的password及authToken在AccountManager中的缓存
*/
public void clearPassword(final Account account) ;
/**
将account对应key-value存储在AccountManager中
*/
public void setUserData(final Account account, final String key, final String value);
/**
获取和该帐号相关的对应key值的value
*/
public String getUserData(final Account account, final String key);
/**
从AccountManager中删除account,由authenticator app决定是否可以删除该帐号
注意:这个方法可以在主线程调用,但是返回的AccountManagerFuture不能在主线程中使用
*/
public AccountManagerFuture<Bundle> removeAccount(final Account account, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler);
/**
直接从AccountManager数据库中删除account
*/
public boolean removeAccountExplicitly(Account account);

下面接口供需要使用帐号服务的apps调用:

/**
获取和该帐号相关的对应key值的value
备注:这个方法可在主线程调用
权限要求:和注册account的authenticator app签名一致
*/
public String getUserData(final Account account, final String key);
/**
获取当前注册到AccountManager中的所有authenticator app的属性(即在authenticator xml中定义的account属性,再加上authenticator app的包名)
备注:这个方法可在主线程调用
*/
public AuthenticatorDescription[] getAuthenticatorTypes();
/**
获取当前存储到AccountManager的所有帐号列表,和getAccountsByType(null)相同
备注:这个方法可在主线程调用
权限要求:需要GET_ACCOUNTS的权限(这个权限在android 6.0及以上是运行时权限,需要动态申请)
*/
public Account[] getAccounts() ;

public Account[] getAccountsByTypeForPackage(String type, String packageName) ;
/**
获取特定account type
备注:这个方法可在主线程调用
权限要求:需要GET_ACCOUNTS的权限(这个权限在android 6.0及以上是运行时权限,需要动态申请)
*/
public Account[] getAccountsByType(String type);

/**
删除存储AccountManager中此账号类型对应的authToken缓存,应用必须调用这个方法将缓存的authToken置为过期,否则getAuthToken获取到的一直是缓存的token
备注:这个方法可以在主线程中调用
*/
public void invalidateAuthToken(final String accountType, final String authToken) ;
/**
获取AccountManager缓存的某个账号对应authTokenType的authToken
如果缓存中没有对应authTokenType的token值,并不会重新生成,而是直接返回false
备注:这个方法可以在主线程中调用
权限要求:和注册account的authenticator app签名相同
*/
public String peekAuthToken(final Account account, final String authTokenType) ;
/**
将一个account对应autheTokenType的authToken缓存在AccountManager中
备注:这个方法可以在主线程中调用
权限要求:和注册account的authenticator app签名相同
*/
public void setAuthToken(Account account, final String authTokenType, final String authToken);
/**
同步获取account对应authTokenType的authToken
notifyAuthFailure,如果authenticator app返回出错,要不要弹通知提醒
备注:这个方法可以可能涉及到网络请求,不要在主线程调用
权限要求:和注册account的authenticator app签名相同
*/
public String blockingGetAuthToken(Account account, String authTokenType, boolean notifyAuthFailure);
/**
权限要求:和注册account的authenticator app签名相同
*/
public AccountManagerFuture<Bundle> getAuthToken(final Account account, final String authTokenType, final Bundle options, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler);
/**
权限要求:和注册account的authenticator app签名相同
*/
public AccountManagerFuture<Bundle> getAuthToken(final Account account, final String authTokenType, final Bundle options, final boolean notifyAuthFailure, AccountManagerCallback<Bundle> callback, Handler handler);
/**
要求用户添加某个特定accountType的帐号,如没有则会引导注册(authenticator app自己的处理)
注意:调用这个接口会调起authenticator app帐号登录的页面。传的activity参数就是用来启动这个intent的:如果传的activity参数不为null,则AccountManager会自动帮你start 登录的intent,否则你自己调用future.getResult(),返回的结果中会有AccountManager#KEY_INTENT对应的帐号登录页面的intent
*/
public AccountManagerFuture<Bundle> addAccount(final String accountType, final String authTokenType, final String[] requiredFeatures, final Bundle addAccountOptions, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler);
/**
认证用户的身份(一般是验证帐号的密码)
注意:验证的行为由authenticator app来定义,同addAccount会调起authenticator app认证的页面
*/
public AccountManagerFuture<Bundle> confirmCredentials(final Account account, final Bundle options, final Activity activity, final AccountManagerCallback<Bundle> callback, final Handler handler);

除了以上接口外,还有一些获取帐号属性等接口:

/**
获取当前注册到AccountManager中的所有authenticator app的属性(即在authenticator xml中定义的account属性,再加上authenticator app的包名)
备注:这个方法可在主线程调用
*/
public AuthenticatorDescription[] getAuthenticatorTypes();
//监听系统的可访问性状态
AccessibilityStateChangeListener
CaptioningManager
//监听系统的触摸探测状态
TouchExplorationStateChangeListener

//使用该标志去指示超时的Ui内容包含交互性控件
FLAG_CONTENT_CONTROLS

//使用此标志去指示超时的UI内容包含图标
FLAG_CONTENT_ICONS

//使用该标志去指示超时的UI内从包含文本
FLAG_CONTENT_TEXT

//注册一个AccessibilityRequestPreparer监听者
void addAccessibilityRequestPreparer(AccessibilityRequestPreparer preparer)

//注册一个AccessibilityStateChangeListener以更改系统的全局辅助性状态
boolean addAccessibilityStateChangeListener(AccessibilityStateChangeListener listener)

//注册一个AccessibilityStateChangeListener以更改系统的全局辅助性状态
void addAccessibilityStateChangeListener(AccessibilityStateChangeListener listener, Handler handler)

//注册一个TouchExplorationStateChangeListener以更改系统的全局触摸浏览状态
void addTouchExplorationStateChangeListener(TouchExplorationStateChangeListener listener, Handler handler)

//注册一个TouchExplorationStateChangeListener以更改系统的全局触摸浏览状态
boolean addTouchExplorationStateChangeListener(TouchExplorationStateChangeListener listener)

//返回给定反馈类型的已启用辅助功能的AccessibilityServiceInfos
List getEnabledAccessibilityServiceList(int feedbackTypeFlags)

//返回已安装了辅助性功能服务的AccessibilityServiceInfos
List getInstalledAccessibilityServiceList()

//获取建议的用户更改UI所需的超时时间
int getRecommendedTimeoutMillis(int originalTimeout, int uiContentFlags)

//对于所有的可访问性服务请求反馈中断
void interrupt()

//检测系统导航区域内是否支持辅助性按钮
static boolean isAccessibilityButtonSupported()

//返回系统是否开启了辅助性服务
boolean isEnabled()

返回系统是否开启了触摸探测
boolean isTouchExplorationEnabled()

//注销AccessibilityRequestPreparer
void removeAccessibilityRequestPreparer(AccessibilityRequestPreparer preparer)

//注销AccessibilityStateChangeListener
boolean removeAccessibilityStateChangeListener(AccessibilityStateChangeListener listener)

//注销TouchExplorationStateChangeListener
boolean removeTouchExplorationStateChangeListener(TouchExplorationStateChangeListener listener)

//发送一个 AccessibilityEvent
void sendAccessibilityEvent(AccessibilityEvent event)
//返回用户首选的字幕启用状态
public final boolean isEnabled()
//返回用户首选的当地语言字幕的字符串
public final String getRawLocale()
//返回用户首选的当地语言
public final Locale getLocale()
//返回用户首选的字幕字体缩放系数
public final float getFontScale()

//返回用户首选的可视属性CaptionStyle
public CaptionStyle getUserStyle()

//为用户首选的字幕启用状态和可视属性的更改添加侦听器
public void addCaptioningChangeListener(@NonNull CaptioningChangeListener listener)

//移除监听
public void removeCaptioningChangeListener(@NonNull CaptioningChangeListener listener)
//设置壁纸需要的权限
<uses-permission android:name="android.permission.SET_WALLPAPER"/> 

//将壁纸设置为bitmap所代表的位图
setBitmap(Bitmap bitmap)

//将壁纸设置为resid资源所代表的图片
setResource(int resid)

//将壁纸设置为data数据所代表的图片
setStream(InputStream data)

//清除壁纸,设置回系统默认的壁纸
clear()

//最小壁纸高度
getDesiredMinimumHeight()

//最小壁纸宽度
getDesiredMinimumWidth()

//获得当前系统壁纸,如果没有设置壁纸,则返回系统默认壁纸
getDrawable()

//加入当前壁纸是动态壁纸,返回动态壁纸信息
getWallpaperInfo()

//获得当前系统壁纸,如果没设置壁纸的话返回null
peekDrawable()

//调用系统自带的壁纸选择功能
Intent chooseIntent = new Intent(Intent.ACTION_SET_WALLPAPER);
startActivity(Intent.createChooser(chooseIntent, "选择壁纸"));
//控制手机音量,
adjustVolume(int direction, int flags) 

//同上,不过可以选择调节的声音类型
/**streamType参数:指定声音类型,有下述几种声音类型:STREAM_ALARM:手机闹铃,STREAM_MUSIC:手机音乐,STREAM_RING:电话铃声,STREAM_SYSTEAM:手机系统,STREAM_DTMF:音调,STREAM_NOTIFICATION:系统提示,STREAM_VOICE_CALL:语音电话
direction参数:AudioManager.ADJUST_LOWER(调小),AudioManager.ADJUST_RAISE(调大)
flags参数:可选的标志位,比如AudioManager.FLAG_SHOW_UI,显示进度条,AudioManager.PLAY_SOUND:播放声音*/
adjustStreamVolume(int streamType, int direction, int flags)

//直接设置音量大小
setStreamVolume(int streamType, int index, intflags)

//返回当前的音频模式
getMode( )

//设置声音模式 。返回值:有下述几种模式: MODE_NORMAL(普通),MODE_RINGTONE(铃声),MODE_IN_CALL(打电话),MODE_IN_COMMUNICATION(通话)
setMode( )

//返回当前的铃声模式
getRingerMode( )

//设置铃声模式 。返回值:有下述几种模式: RINGER_MODE_NORMAL(普通),RINGER_MODE_SILENT(静音),RINGER_MODE_VIBRATE(震动)
setRingerMode(int streamType)

//获得手机的当前音量,最大值为7,最小值为0,当设置为0的时候,会自动调整为震动模式
getStreamVolume(int streamType)

//获得手机某个声音类型的最大音量值
getStreamMaxVolume(int streamType)

//将手机某个声音类型设置为静音
setStreamMute(int streamType,boolean state)

//设置是否打开扩音器
setSpeakerphoneOn(boolean on)

//设置是否让麦克风静音
setMicrophoneMute(boolean on)

//判断麦克风是否静音或是否打开
isMicrophoneMute()

//判断是否有音乐处于活跃状态
isMusicActive()

//判断是否插入了耳机
isWiredHeadsetOn()

//放弃音频的焦点
abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl)

//调整最相关的流的音量,或者给定的回退流
adjustSuggestedStreamVolume(int,int suggestedStreamType intflags)

//给音频硬件设置一个varaible数量的参数值
getParameters(String keys)

//返回是否该用户的振动设置为振动类型
getVibrateSetting(int vibrateType)

//检查是否A2DP蓝牙耳机音频路由是打开或关闭
isBluetoothA2dpOn()

//显示当前平台是否支持使用SCO的关闭调用用例
isBluetoothScoAvailableOffCall()

//检查通信是否使用蓝牙SCO
isBluetoothScoOn()

//加载声音效果
loadSoundEffects()

//播放声音效果
playSoundEffect((int effectType, float volume)

//注册一个组件MEDIA_BUTTON意图的唯一接收机
egisterMediaButtonEventReceiver(ComponentName eventReceiver) 

//请求音频的焦点
requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint) 

//要求使用蓝牙SCO耳机进行通讯
setBluetoothScoOn(boolean on)

//启动/停止蓝牙SCO音频连接
startBluetoothSco/stopBluetoothSco()

//卸载音效
unloadSoundEffects()
        val keyguardManager = context.getSystemService(AppCompatActivity.KEYGUARD_SERVICE) as KeyguardManager
        if (keyguardManager.isKeyguardSecure) {
            val authenticationCallback = object : BiometricPrompt.AuthenticationCallback() {
                override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                    LogUtil.d("onAuthenticationSucceeded: ")
                }

                override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                    LogUtil.d("onAuthenticationError: $errorCode, str: $errString")
                }
            }
            val handler = Handler(Looper.getMainLooper())
            val builder = BiometricPrompt.Builder(context)
                .setTitle("verify it is you?")
                .setNegativeButton("Negative Btn", { runnable: Runnable -> handler.post(runnable) }
                ) { _: DialogInterface?, _: Int ->
                    LogUtil.d("showLockScreen: negative btn clicked, do nothing")
                }
                .setSubtitle("that is subtitile")
            if (keyguardManager.isDeviceSecure) {
                builder.setDeviceCredentialAllowed(true)
            }
            val bp = builder.build()
            bp.authenticate(
                CancellationSignal(),
                { runnable: Runnable -> handler.post(runnable) },
                authenticationCallback
            )
        } else {
            LogUtil.d("showLockScreen:  no in scrue.... no password")
        }
//剪贴板中保存的所有剪贴数据集
ClipData

//剪贴数据集中的一个数据条目
ClipData.Item

// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);

// 创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据)
ClipData clipData = ClipData.newPlainText(null, "需要复制的文本数据");

// 把数据集设置(复制)到剪贴板
clipboard.setPrimaryClip(clipData);

// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);

// 获取剪贴板的剪贴数据集
ClipData clipData = clipboard.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
    // 从数据集中获取(粘贴)第一条文本数据
    CharSequence text = clipData.getItemAt(0).getText();
    System.out.println("text: " + text);
}

// 添加剪贴板数据改变监听器
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
    @Override
    public void onPrimaryClipChanged() {
        // 剪贴板中的数据被改变,此方法将被回调
        System.out.println("onPrimaryClipChanged()");
    }
});

// 移除指定的剪贴板数据改变监听器
clipboard.removePrimaryClipChangedListener(listener);
//一个action,添加一个appwidget到桌面显示,启动appwidget选择界面,必须对EXTRA_APPWIDGET_ID(和一个桌面小部件是一对一的关系)常量进行赋值,并会返回一个结果RESULT_CANCELED(Activity常量,删除)或者RESULT_OK(Activity常量,添加)
ACTION_APPWIDGET_PICK

//意义和上面相同,只不过显示的地方不同,一个在桌面,一个在keyguard
ACTION_KEYGUARD_APPWIDGET_PICK

//appwidget的id,唯一标志
EXTRA_APPWIDGET_ID

//6种广播常量:[appwidget provider中进行处理](https://www.cnblogs.com/liutao-guoyujiao/p/6498685.html)

//AppWidgetProvider组件名
EXTRA_APPWIDGET_PROVIDER

//私有常量(不是静态)
IAppWidgetService

//获取AppWidgetManager实例
getInstance(Context context)

//有3种重载形式,id数组,单一id,和appwidget provder组件名,会向相应的appwidget provider发出action=ACTION_APPWIDGET_UPDATE的广播
updateAppWidget(* *, RemoteViews views)

//有2种重载形式,id数组,单一id,会向相应的appwidget provider发出action=ACTION_APPWIDGET_UPDATE的广播;和2)区别是,局部更新3)性能更好
partiallyUpdateAppWidget(* *, RemoteViews views)

//更新appwidget的相关属性
updateAppWidgetOptions(int appWidgetId, Bundle options)
//根据displayId参数获得一个逻辑显示器的信息
public Display getDisplay(int displayId)

//获得当前所有有效的逻辑显示器列表
public Display[] getDisplays()

//登记一个显示监听对象,用来监听显示器的新增、去除或改变通知事件
public void registerDisplayListener(DisplayListener listener, Handler handler)

//取消先前登记的一个显示监听对象
public void unregisterDisplayListener(DisplayListener listener)

//启动WIFI显示器的扫描
scanWifiDisplays()

//根据设备地址连接WIFI显示器
public void connectWifiDisplay(String deviceAddress)

//断开WIFI显示器
public void disconnectWifiDisplay()

//为WIFI显示器命名
public void renameWifiDisplay(String deviceAddress, String alias)

//取消先前记忆的WIFI显示器
public void forgetWifiDisplay(String deviceAddress)

//得到当前的WIFI显示器的状态
public WifiDisplayStatus getWifiDisplayStatus()
上一篇下一篇

猜你喜欢

热点阅读