Android Framework中的PolicyManager简介

Android Framework中的策略管理器(PolicyManager)简介及编程实例 策略管理器(PolicyManager)是Android Framework中的一个重要组件,它提供了一种机制,允许开发者对设备上的各种策略进行管理和控制。策略管理器(PolicyManager)是Android Framework中的一个重要组件,用于管理和控制设备上的各种策略。通过策略管理器,开发者可以实现应用程序的安全性、隐私性和权限控制等功能。下面是一个简单的编程实例,演示如何使用策略管理器禁用应用程序的摄像头访问权限。下面是一个简单的编程示例,演示如何使用策略管理器禁用应用程序的摄像头访问权限。 阅读详情

PolicyManager类位于framework\base\core\java\com\android\internal\policy目录中的PolicyManager.java文件中。PolicyManager主要用于创建Window类、LayoutInflater类和WindowManagerPolicy类,它扮演着简单工厂模式中的工厂类角色,而抽象产品角色由IPolicy接口实现,具体产品角色由Policy类实现。它们的关系如下图所示:


从下面三个类的代码可以看出,都使用了hide注解,因此,这三个类都是不对外公开的API,只限于Framework内部使用。

抽象产品类IPolicy实现如下(IPolicy.java):

  1. package com.android.internal.policy;  
  2.   
  3. import android.content.Context;  
  4. import android.view.LayoutInflater;  
  5. import android.view.Window;  
  6. import android.view.WindowManagerPolicy;  
  7.   
  8. /** 
  9.  * {@hide} 
  10.  */  
  11.   
  12. /* The implementation of this interface must be called Policy and contained 
  13.  * within the com.android.internal.policy.impl package */  
  14. public interface IPolicy {  
  15.     public Window makeNewWindow(Context context);  
  16.   
  17.     public LayoutInflater makeNewLayoutInflater(Context context);  
  18.   
  19.     public WindowManagerPolicy makeNewWindowManager();  
  20. }  

具体产品类Policy实现如下(Policy.java):

  1. package com.android.internal.policy.impl;  
  2.   
  3. import android.content.Context;  
  4. import android.util.Log;  
  5.   
  6. import com.android.internal.policy.IPolicy;  
  7. import com.android.internal.policy.impl.PhoneLayoutInflater;  
  8. import com.android.internal.policy.impl.PhoneWindow;  
  9. import com.android.internal.policy.impl.PhoneWindowManager;  
  10.   
  11. /** 
  12.  * {@hide} 
  13.  */  
  14.   
  15. // Simple implementation of the policy interface that spawns the right  
  16. // set of objects  
  17. public class Policy implements IPolicy {  
  18.     private static final String TAG = "PhonePolicy";  
  19.   
  20.     //需要在Policy类创建时预先加载的一些类  
  21.     private static final String[] preload_classes = {  
  22.         "com.android.internal.policy.impl.PhoneLayoutInflater",  
  23.         "com.android.internal.policy.impl.PhoneWindow",  
  24.         "com.android.internal.policy.impl.PhoneWindow$1",  
  25.         "com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback",  
  26.         "com.android.internal.policy.impl.PhoneWindow$DecorView",  
  27.         "com.android.internal.policy.impl.PhoneWindow$PanelFeatureState",  
  28.  "com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState",  
  29.     };  
  30.   
  31.     static {  
  32.         // 出于性能考虑,在Policy类加载时提前加载会用到的相关类  
  33.         for (String s : preload_classes) {  
  34.             try {  
  35.         //加载指定类到Java虚拟机中,并执行类中的静态代码段  
  36.                 Class.forName(s);  
  37.             } catch (ClassNotFoundException ex) {  
  38.                 Log.e(TAG, "Could not preload class for phone policy: " + s);  
  39.             }  
  40.         }  
  41.     }  
  42.   
  43.     public PhoneWindow makeNewWindow(Context context) {  
  44.         return new PhoneWindow(context);  
  45.     }  
  46.   
  47.     public PhoneLayoutInflater makeNewLayoutInflater(Context context) {  
  48.         return new PhoneLayoutInflater(context);  
  49.     }  
  50.   
  51.     //PhoneWindowManager实现了WindowManagerPolicy接口      
  52.     //这里返回值直接写成WindowManagerPolicy更合理些  
  53.     public PhoneWindowManager makeNewWindowManager() {  
  54.         return new PhoneWindowManager();  
  55.     }  
  56. }  

工厂类PolicyManager实现如下(PolicyManager.java):

  1. <pre class="java" name="code">package com.android.internal.policy;  
  2.   
  3. import android.content.Context;  
  4. import android.view.LayoutInflater;  
  5. import android.view.Window;  
  6. import android.view.WindowManagerPolicy;  
  7.   
  8. import com.android.internal.policy.IPolicy;  
  9.   
  10. /** 
  11.  * {@hide} 
  12.  */  
  13.   
  14. public final class PolicyManager {  
  15.     private static final String POLICY_IMPL_CLASS_NAME =  
  16.         "com.android.internal.policy.impl.Policy";  
  17.   
  18.     private static final IPolicy sPolicy;  
  19.   
  20.     static {  
  21.        // 运行时动态装载IPolicy实现类  
  22.         try {  
  23.            //加载Policy类的同时会执行其中的静态代码段  
  24.             Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME);  
  25.             sPolicy = (IPolicy)policyClass.newInstance();  
  26.         } catch (ClassNotFoundException ex) {  
  27.             throw new RuntimeException(  
  28.                     POLICY_IMPL_CLASS_NAME + " could not be loaded", ex);  
  29.         } catch (InstantiationException ex) {  
  30.             throw new RuntimeException(  
  31.                     POLICY_IMPL_CLASS_NAME + " could not be instantiated", ex);  
  32.         } catch (IllegalAccessException ex) {  
  33.             throw new RuntimeException(  
  34.                     POLICY_IMPL_CLASS_NAME + " could not be instantiated", ex);  
  35.         }  
  36.     }  
  37.   
  38.     // 构造函数私有,保证是单例类  
  39.     private PolicyManager() {}  
  40.   
  41.     // The static methods to spawn new policy-specific objects  
  42.     public static Window makeNewWindow(Context context) {  
  43.         return sPolicy.makeNewWindow(context);  
  44.     }  
  45.   
  46.     public static LayoutInflater makeNewLayoutInflater(Context context) {  
  47.         return sPolicy.makeNewLayoutInflater(context);  
  48.     }  
  49.   
  50.     public static WindowManagerPolicy makeNewWindowManager() {  
  51.         return sPolicy.makeNewWindowManager();  
  52.     }  
  53. }
【头歌实训:逆置顺序表】 根据提示,在右侧编辑器补充函数rev的代码,使用顺序表L的空间就地逆置L。},要求时间复杂度为O(n),空间复杂度为O(1)。第一行为顺序表逆置之前的元素。每个数据后一个空格。第二行为顺序表逆置之后的元素。每个数据后一个空格。本关任务:设计一个算法,将一个顺序表L的元素{a。第一行为顺序表中元素个数n。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功! 阅读详情

相关推荐

杰理蓝牙AC696X开发实战:自定义蓝牙名称与提示音配置指南

本文详细介绍了杰理AC696X蓝牙芯片开发中自定义蓝牙名称与提示音配置的完整实战指南。文章从SDK工具定位入手,逐步讲解如何通过配置工具修改蓝牙名称,并重点阐述了替换提示音的正确步骤与音频文件(如WAV格式、16kHz采样率)的详细参数要求,最后指导如何生成并验证最终固件,帮助开发者快速实现个性化设备定制。

weixin_29161719的博客 562

android的Policymanager 作用

PolicyManager类位于framework\base\core\java\com\android\internal\policy目录中的PolicyManager.java文件中。PolicyManager主要用于创建Window类、LayoutInflater类和WindowManagerPolicy类,它扮演着简单工厂模式中的工厂类角色,而抽象产品角色由IPolicy接口实现,具体产品

6494

UE5实战:用Cesium插件打造逼真湖泊效果(附波纹参数调优技巧)

本文详细介绍了在Unreal Engine 5中利用Cesium插件创建逼真区域水效果(如湖泊)的实战流程。重点解析了通过材质层混合机制,精细调整波纹参数(如DistanceScale、NearScale)来模拟不同水体状态,并提供了从资产创建、地形配置到视觉调优的一站式解决方案,帮助开发者高效实现非海洋水域的动态视觉效果。

weixin_29209805的博客 160

如何通过PolicyManager创建一个新的Window

当程序员去创建一个新的window的时候,发现new的时候右好多方法未实现,在android中有这样一个类可以生成一个新的window,但是由于该类被android设置为@hide类型的类,所以程序员无法使用。但是程序员总是有办法的,通过java的反射机制就可以访问到该类,并且调用到生成window的方法。贴上代码如下: public void createWindow(){ try {

jerboy的专栏 856

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 994

适航规章、标准,书籍资料下载汇总(增加DO-297 IMA)

从事IMA平台适航工作的朋友看过来,DO-297英文版PDF可以下载了!更新日志:2024-9-28:初版。2024-10-21:增加DO-330英文版PDF下载,后台回复关键词”330“获取下载链接。2024-10-30:增加DO-160G中文版(非机翻)和英文版PDF下载,后台回复关键词”160“获取下载链接。2024-11-10:增加DO-297英文版PDF下载,后台回复关键词”297“获取下载链接。以下是一些收集到的适航相关的资料,分享给大家。

qq_41854911的博客 1579

Modem2G/3G/4G/5G:高通Policy Manager(概述,优势,架构与API,配置与debug方法)

By:GentlemanTsao 本篇主要介绍1 Policy Manager概述2 为什么使用policy manager弱耦合:方便修改:动态配置:3 policy manager架构与API3.1 policy manager包括两部分:3.2 上层架构:3.3 Policy生效过程4 如何修改Policyman XML4.1 Policyman包含的XML文件4.2 三种类型:Lists, booleans, and timersListBooleansTimers4.3 Policyman XML

GentelmanTsao的博客 4234

akamai3简单分析

akamai流程的简单分析

记录一些web逆向的过程 918

Android使用隐藏api的方法(使用被@hide的api)

今天去方案公司,看了build来build的去,我独自把Android系统的Audio整个流程部分复习一篇,看了他们辛苦的build,深感同情,看了一部分Audio程序,发现一些被表示@hide的常量和方法,自己总有一种占有欲和支配欲太强了,所以打算把@hide去掉,也参考网上的一些方法,不过晚上大部分的意见是通过反射的方法,我在下面总结,通过发射的方法我第一次见,是我打算写一个APP去...

FLY_THINK2012的博客 352

毕设-YOLOv8-OBB 实现自有数据集缺陷旋转检测全过程记录

这次项目让我深入理解了 YOLOv8-OBB 的原理和使用流程。步骤内容工具数据标注制作倾斜缺陷样本格式转换从 HBB 转换为 OBB模型训练使用 Ultralytics YOLOv8 OBBCLI 命令模型测试推理与结果可视化通过 OBB 模型,我的缺陷检测系统获得了更高的精度和鲁棒性。未来我打算继续优化数据增强方式,比如引入随机旋转、仿射变换等,让模型更适应不同角度的样本。

FJN110的博客 447

【总目录】AUTOSAR精进之路专栏介绍及内容目录持续更新...

本专栏系统讲解AUTOSAR汽车电子开发技术,包含Eth/OS/Can/Lin等协议栈、MCAL驱动、功能安全等核心模块。内容基于实际项目经验,从概念原理到工程配置、特殊需求实现及问题排查进行深入剖析。重点涵盖TC3xx芯片平台开发、多核OS、网络管理、存储协议栈等难点问题,提供100+篇原创技术文章。专栏采用付费模式,保证内容完整性和持续更新,并提供专业答疑服务。适合汽车电子工程师系统学习AUTOSAR开发技术。

qq_36056498的博客 6522

Android 7系统网络(五)Framework层(上)—ConnectivityService核心机制

ConnectivityService 是 Framework 层最核心的网络服务,负责管理系统中所有网络连接的状态。如果把 Android 网络比作一座城市,ConnectivityService 就是交通调度中心——它决定哪个网络是"默认网络"、何时切换网络、如何处理应用的网络请求。源码路径职责说明管理 NetworkAgent维护所有活跃网络连接(WiFi、移动数据、以太网等)的代理评分与选择比较各网络的评分,决定默认网络处理 NetworkRequest应用请求特定类型网络时的分配。

AfinalStone的专栏 220

Spring Boot:如何快速搭建一个高性能微服务架构?

通过本文的详细步骤,我们成功搭建了一个高性能的微服务架构。Spring Boot 和 Spring Cloud 提供了强大的工具链,使得开发者能够快速实现服务注册与发现、负载均衡、熔断器与降级机制等功能。同时,通过数据库连接池、Redis 缓存和异步处理等优化手段,进一步提升了系统的性能和可靠性。希望本文能够帮助你快速入门 Spring Boot 微服务架构的搭建,并为实际项目提供参考。如果你有任何问题或建议,欢迎在评论区留言!

shrgegrb的博客 1013

Android framework层 按键的处理流程

事件处理流程 1)InputManager负责读取事件并把事件送到frameworks的java层 2)WindowManagerService里会有一个InputMonitor类来监听事件变化并做相应的分发处理。 3)在WindowManagerService会有一个WindowManagerPolicy来做消息拦截处理。 4)WindowManagerService会把消息发给最上面运

Tony的专栏 4761

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 如何调用 隐藏的 API 接口

怎样查看并且使用 Android 隐藏 API 和内部 APIhttps://www.jianshu.com/p/fbf45770ecc8 android 隐藏API显式调用以及内部资源使用方法https://blog.csdn.net/hp910315/article/details/77749414 Android应用开发中如何使用隐藏的APIhttps://www.cnblogs.com/j...

weixin_33759269的博客 583

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: java线程安全总结
下一篇: ViewGroup的onMeasure和onLayout分析
cding1818
博客等级 码龄17年 963粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值