当前位置: 首页 > news >正文

衡水电子网站建设wordpress 支持中文

衡水电子网站建设,wordpress 支持中文,商城网站jq楼层响应,php做公司网站在前面的视频、文章中我们介绍完了整个车载Android应用开发所需要的基础知识#xff1a; 【视频文稿】车载Android应用开发与分析 - 走进车载操作系统 - 掘金【视频文稿】车载Android应用开发与分析 - AOSP的下载与编译 - 掘金【视频文稿】车载Android应用开发与分析 - 开发系…在前面的视频、文章中我们介绍完了整个车载Android应用开发所需要的基础知识 【视频文稿】车载Android应用开发与分析 - 走进车载操作系统 - 掘金【视频文稿】车载Android应用开发与分析 - AOSP的下载与编译 - 掘金【视频文稿】车载Android应用开发与分析 - 开发系统应用 - 掘金【视频文稿】车载Android应用开发与分析 - AIDL实践与封装(上) - 掘金【视频文稿】车载Android应用开发与分析 - AIDL实践与封装(下) - 掘金 本期内容我们介绍原生Android Automotive中车载应用的实现方式和它的原理。首先要介绍的就是车载应用开发中非常重要的一个系统应用Android系统的UI - SystemUI。 由于原生Android系统的SystemUI代码量很大、内容也非常庞杂这里我会挑选出对车载SystemUI开发具有参考意义的模块进行介绍大约会有4-5期的内容主要分为以下几个模块 车载Android应用开发与分析 - SystemUI 「功能」与「源码结构」分析 - 掘金车载Android应用开发与分析 - 初试 SystemUI Plugin SystemUI的源代码可能是所有Android原生应用中最复杂的一个当我们需要定制SystemUI时庞大的源码量会对的定制化开发带来巨大的潜在风险。所以目前车载SystemUI常见的做法就是从原生SystemUI中移植少量必须的源码然后从头定制一个源码、功能完全可控的SystemUI。 重新开发一个SystemUI就是唯一的选项吗当然不是Google官方早就注意到了这个问题所以SystemUI中提供插件化的开发方式 - SystemUI Plugin。 本文源码地址/frameworks/base//refs/heads/main/packages/SystemUI/plugin/ExamplePlugin/ 本文源码环境基于Android 13 SystemUI Plugin SystemUI plugin机制是一种让SystemUI的功能可以被动态替换或修改的方法它可以让开发者快速创建和迭代SystemUI的原型而尽可能少的修改SystemUI的主框架。 注意使用Plugin并不能保证我们完全不需要修改SystemUI的主框架毕竟需求永远是多变的。 Plugin Hooks Plugin hooks是一些预定义的插件接口它们可以让应用实现一些特定的功能并通过Intent和注解来注册和声明插件的类型和版本。Plugin hooks有多种类型例如OverlayPlugin, QSFactory, VolumeDialog等每种类型都有一个对应的action和expected interface用于标识插件的功能和要求。 Android 13中Plugin hooks预定义接口主要有以下几种 BcSmartspaceDataPlugin这个plugin可以让应用提供自定义的数据给锁屏界面上的智能空间BcSmartspace例如天气、日历、新闻等。ClockProviderPlugin这个plugin可以让应用提供自定义的时钟样式给锁屏界面和始终应用。DozeServicePlugin这个plugin可以让应用自定义Doze模式的行为例如控制屏幕亮度、显示内容、传感器等。FalsingPlugin这个plugin可以让应用自定义对误触Falsing事件的检测和处理例如判断用户是否真的想滑动通知栏或解锁屏幕等。GlobalActions这个plugin可以让应用自定义全局操作GlobalActions对话框的外观和行为例如添加新的操作按钮或改变对话框样式。GlobalActionsPanelPlugin这个plugin可以让应用在全局操作对话框中添加一个可展开的面板用于显示更多的操作选项或信息。IntentButtonProvider这个plugin可以让应用在锁屏界面上添加一个自定义的按钮用于启动一个指定的Intent。NavigationEdgeBackPlugin这个plugin可以让应用自定义导航栏边缘返回NavigationEdgeBack手势的行为例如改变触发区域或动画效果。NotificationListenerController这个plugin可以让应用控制通知监听器NotificationListener服务的连接和断开以及获取通知事件和数据。NotificationMenuRowPlugin这个plugin可以让应用自定义通知菜单栏NotificationMenuRow的外观和行为例如添加新的菜单项或改变菜单样式。NotificationPersonExtractorPlugin这个plugin可以让应用自定义从通知中提取人物信息NotificationPersonExtractor的逻辑例如识别通知中包含的联系人或头像等。OverlayPlugin这个plugin可以让应用自定义覆盖在通知栏上方的视图OverlayView用于显示一些额外的内容或功能。PluginFragment这个plugin可以让应用在SystemUI中嵌入一个Fragment用于显示一些自定义的界面或功能。QSFactory这个plugin可以让应用提供自定义的快速设置工厂QSFactory用于创建快速设置图块或面板。SensorManagerPlugin这个plugin可以让应用使用SensorManager服务来注册和取消注册传感器监听器以及获取传感器事件和数据。ToastPlugin这个plugin可以让应用自定义Toast消息Toast的外观和行为例如改变Toast位置或持续时间等。ViewProvider这个plugin可以让应用提供一个自定义的视图View用于替换SystemUI中某些组件或功能。VolumeDialog这个plugin可以让应用自定义音量调节对话框VolumeDialog的外观和行为例如添加新的音量控制选项或改变音量条的样式。 Plugin 上手 创建一个AndroidStudio的SystemUI plugin项目可以参考以下的步骤 1编译SystemUIPluginLib.jar 使用Plugin之前我们需要编译出SystemUIPluginLib.jar在AOSP源码根目录执行下面的指令。 make SystemUIPluginLib然后就可以在下面的目录中得到SystemUIPluginLib.jar out/target/product/emulator_x86/obj/JAVA_LIBRARIES/SystemUIPluginLib_intermediates/javalib.jar在AOSP的文档中建议使用 frameworks/base/packages/SystemUI/plugin/update_plugin_lib.sh 脚本编译 SystemUIPluginLib.jar不过我编译时出现了环境配置问题。 2配置系统签名 在build.gradle中配置系统签名。 android {...signingConfigs {sign {storeFile file(system.keystore)storePassword 123456keyAlias cardemokeyPassword 123456}}buildTypes {release {minifyEnabled falsesigningConfig signingConfigs.sign}debug {minifyEnabled falsesigningConfig signingConfigs.sign}} }关于如何制作系统签名请参考车载Android应用开发与分析 - 开发系统应用 - 掘金 3创建一个Plugin 在plugin项目中定义一个类实现自Plugin中已经提供的各种插件并使用Requires注解声明target和version字段这些字段用于标识插件的类型和版本。 Requires(target OverlayPlugin.class, version OverlayPlugin.VERSION) public class SampleOverlayPlugin implements OverlayPlugin {private static final String TAG SampleOverlayPlugin;private Context mPluginContext;private View mStatusBarView;private View mNavBarView;Overridepublic void onCreate(Context sysuiContext, Context pluginContext) {Log.d(TAG, onCreate);mPluginContext pluginContext;}Overridepublic void onDestroy() {if (mInputSetup) {mStatusBarView.getViewTreeObserver().removeOnComputeInternalInsetsListener(onComputeInternalInsetsListener);}Log.d(TAG, onDestroy);if (mStatusBarView ! null) {mStatusBarView.post(() - ((ViewGroup) mStatusBarView.getParent()).removeView(mStatusBarView));}if (mNavBarView ! null) {mNavBarView.post(() - ((ViewGroup) mNavBarView.getParent()).removeView(mNavBarView));}}Override public void setup(View notificationShadeWindowView, View navBar) {Log.d(TAG, Setup);if (notificationShadeWindowView instanceof ViewGroup) {mStatusBarView LayoutInflater.from(mPluginContext).inflate(R.layout.colored_overlay, (ViewGroup) notificationShadeWindowView, false);((ViewGroup) notificationShadeWindowView).removeAllViews();((ViewGroup) notificationShadeWindowView).addView(mStatusBarView);}if (navBar instanceof ViewGroup) {mNavBarView LayoutInflater.from(mPluginContext).inflate(R.layout.colored_overlay, (ViewGroup) navBar, false);((ViewGroup) navBar).removeAllViews();((ViewGroup) navBar).addView(mNavBarView);} } }注意Android不同版本中SystemUI的代码存在不小的差异例如Android13中setup(View statusBar, View navBar)中返回的statusBar实际上是NotificationShadeWindowView。 4注册Plugin 在plugin项目的AndroidManifest中注册一个service使用action和permission属性指定插件的接口和权限这样SystemUI就可以通过Intent找到插件。 uses-permission android:namecom.android.systemui.permission.PLUGIN /applicationserviceandroid:name.SampleOverlayPluginandroid:exportedfalseandroid:labelstring/plugin_labeltools:ignoreInstantiatableintent-filteraction android:namecom.android.systemui.action.PLUGIN_OVERLAY //intent-filter/service/application的name可以在我们实现的plugin接口中找到。 SystemUI为了保证系统安全对于plugin的加载构筑了两道防线 第一道防线是Build.IS_DEBUGGABLE检查。SysUI 在扫描或加载设备上的任何插件之前会检查Build.IS_DEBUGGABLE以确保构建是可调试的。 第二道防线是就是签名权限。所有插件都必须被系统签名且持有com.android.systemui.permission.PLUGIN权限才能加载其任何代码否则将记录违规行为并忽略插件。 5运行Plugin 将plugin.apk push 到Android 13 模拟器的/system/priv-app/ 目录下重启。可以看到如下的效果 NavBar的所有子View被移除并添加了一个红色的ViewNotificationShadeWindowView的所有子View被移除并添加了一个红色的View。 总结 本文初试了SystemUI插件机制在编写本文时发现Plugin相关的资料少的可怜即使是官方资料有的也过时了。所以就像标题那样本文只是简单尝试了Plugin如何使用Plugin来详细定制一个完全符合我们需求的SystemUI呢这个我们放到以后再写因为接下来需要先来分析SystemUI Plugin的原理在资料如此稀少的情况下不了解原理几乎无法写出符合需求的Plugin。在分析的原理的过程中我们会逐步补完、理解一些Plugin的概念。 以上就是本文的所有内容感谢你的阅读希望对你所有帮助。 参考资料 Sysui plugin SystemUI Plugin 简介及使用 /SystemUI/docs/plugins.md
http://www.yutouwan.com/news/75810/

相关文章:

  • 网站建设费分多少期摊销深圳网站建设vr知识
  • 网站建站网站开发什么网站可以做投资
  • 网站商城例子下载广西住房和城乡建设厅网站
  • 百度商桥在网站怎样注册个人网站
  • wordpress 站点网络丽江市网站建设
  • 北京网站设计公司wx成都柚米科技15网站案例代码
  • 嘉兴做外贸网站比较好的公司上海网站建设公司价格
  • 台州网站制作维护网站制作 苏州
  • 网站到底备案好不好大型网站开发框架移动前端框架
  • 做网站建设分哪些类型自媒体包括哪些平台
  • 新郑市网站建设wordpress 底部栏位置
  • 徐州网站开发口碑好百度统计平台
  • 电子商务网站建设管理答案建设网站设备预算
  • 网站建设流程是这样的 里面有很游戏软件开发培训
  • 德清网站公司建设崇左做网站公司
  • 网站建设目标有哪几个方面大学营销型网站建设实训课程
  • 福永三合一网站设计成都 网站建设 公司
  • 泉州(晋江)网站建设厦门 公司网站建设
  • 突出什么 加强网站建设python php网站开发
  • 动漫网站网页设计做网站带来好处
  • 贸易网站建设方案塘厦企业网站推广公司
  • 网站被挂马怎么处理photoshop 做网站
  • 科技类网站色彩搭配常州模板建站定制网站
  • 福建网站优化建设松岗网站
  • 城市网站联盟网站新闻模块代码
  • 网站怎么样建设企业app下载
  • 厦门市住房建设网站深圳龙华网站建设
  • 免费网站入口2022伊园内部网页制作
  • 网站使用网络图片做素材 侵权吗四合一小说网站搭建教程
  • 成都免费网站制作东莞房价2021