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

Android Vibrator学习记录

由于设备没有马达,有个需求需要修改音量上下键中弹出界面的震动图标。

按音量上下键后,弹出的界面在systemUI 中的VolumeDialogImpl 中。

private void initDialog(int lockTaskModeState) {mDialog = new CustomDialog(mContext);initDimens();mConfigurableTexts = new ConfigurableTexts(mContext);mHovering = false;mShowing = false;mWindow = mDialog.getWindow();mWindow.requestFeature(Window.FEATURE_NO_TITLE);mWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));mWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND| WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);mWindow.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);mWindow.addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY);mWindow.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);mWindow.setWindowAnimations(com.android.internal.R.style.Animation_Toast);WindowManager.LayoutParams lp = mWindow.getAttributes();lp.format = PixelFormat.TRANSLUCENT;lp.setTitle(VolumeDialogImpl.class.getSimpleName());lp.windowAnimations = -1;lp.gravity = mContext.getResources().getInteger(R.integer.volume_dialog_gravity);mWindow.setAttributes(lp);mWindow.setLayout(WRAP_CONTENT, WRAP_CONTENT);mDialog.setContentView(R.layout.volume_dialog);mDialogView = mDialog.findViewById(R.id.volume_dialog);

由initDialog 可知,布局文件由volume_dialog.xml 实现。

 if (!mShowVibrate) {mRingerDrawerVibrate.setVisibility(GONE);}

震动图标是否显示由mShowVibrate 控制。

跟代码可知该变量由VibratorHelper.hasVibrator().

 public boolean hasVibrator() {return mVibrator != null && mVibrator.hasVibrator();}

在SystemVIbrator.java 中实现方式为

    public boolean hasVibrator() {if (mVibratorManager == null) {Log.w(TAG, "Failed to check if vibrator exists; no vibrator manager.");return false;}return mVibratorManager.getVibratorIds().length > 0;}

最终是获取hal层VibratorIds 数量来判断是否支持震动。

// Load vibrator hardware info. The vibrator ids and manager capabilities are loaded only// once and assumed unchanged for the lifecycle of this service. Each individual vibrator// can still retry loading each individual vibrator hardware spec once more at systemReady.mCapabilities = mNativeWrapper.getCapabilities();int[] vibratorIds = mNativeWrapper.getVibratorIds();if (vibratorIds == null) {mVibratorIds = new int[0];mVibrators = new SparseArray<>(0);} else {// Keep original vibrator id order, which might be meaningful.mVibratorIds = vibratorIds;mVibrators = new SparseArray<>(mVibratorIds.length);for (int vibratorId : vibratorIds) {VibratorController vibratorController =injector.createVibratorController(vibratorId, listener);mVibrators.put(vibratorId, vibratorController);}}

将这里屏蔽后,fwk就不会再支持震动了。

    // int[] vibratorIds = mNativeWrapper.getVibratorIds();// if (vibratorIds == null) {mVibratorIds = new int[0];mVibrators = new SparseArray<>(0);// } else {//     // Keep original vibrator id order, which might be meaningful.//     mVibratorIds = vibratorIds;//     mVibrators = new SparseArray<>(mVibratorIds.length);//     for (int vibratorId : vibratorIds) {//         mVibrators.put(vibratorId, injector.createVibratorController(vibratorId, listener));//     }// }

http://www.dtcms.com/a/465297.html

相关文章:

  • pop、push、unshift、shift的作用?
  • 大模型激活值相关公式说明(114)
  • unity升级对ab变更的影响
  • 谁是远程控制软件的“最优选”?UU远程、ToDesk、向日葵深度横测
  • 天机学堂升级版,海量新功能加入
  • vuedraggable拖拽任意组件并改变数据排序
  • {MySQL查询性能优化索引失效的八大场景与深度解决方案}
  • 网站整体建设方案360网站免费推广怎么做
  • 方舟优品:生产型撮合模式如何推动电商行业创新发展
  • 无人机芯片模块技术要点分析
  • 使用手机检测的智能视觉分析技术与应用 加油站使用手机 玩手机检测
  • 门户网站建设的重要性如何优化网页
  • 怎么在工商网站做实名认证海淀商城网站建设
  • 加餐 结束语
  • 做网站都需要用到什么3d建模一般学费多少
  • 深入解析 Conda、Anaconda 与 Miniconda:Python 环境管理的完整指南
  • 用elasticlient封装Elasticsearch C++ 客户端封装库
  • 使用go搭建本地mcp实现AI选股小记
  • Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
  • 网站代码怎么放长春百度快速优化
  • 物流好的网站模板哈尔滨网站关键词优化
  • 查看安卓设备的音视频解码器信息
  • 第三章 · 数据库管理与视频路径获取
  • 网站log文件示例网站备案到公司
  • 玩转ChatGPT:Kimi OK Computer 数据分析
  • iOS 26 App 性能测试|性能评测|iOS 26 性能对比:实战策略
  • 网站文章多久收录郑州seo服务技术
  • 随州网站建设学习不限流量网站空间
  • 突破机房围墙:openEuler设备的公网管理实战指南
  • 2025年渗透测试面试题总结-105(题目+回答)