小米开发平台开发者评价功能操作指南

小米开发平台开发者评价功能操作指南

为评估开发者站的使用体验、获取真实的反馈,以帮助开发者更好地使用平台,我们从平台功能、运营服务、审核三个方向建立了开放平台的评价体系。

您真实的用户体验,能帮助我们及时判定开发者站的优化方向是否正确。本文档介绍了评价的入口及操作指南,希望您能有所了解,并积极给予反馈。

一、平台功能评价

1、评价体系现覆盖开放平台的八大主要功能,包括:

开发者账号注册

(应用/游戏)创建上传

(应用/游戏)更新

(应用/游戏)下架请求

被下架后申诉

应用认领

商品管理

素材A/B测试(创建任务 & 查看数据)

2、评价步骤

2.1 进入评价页面

在上述八大功能使用后的“提交审核成功”页面,点击右下角的橙色小方框,即可进入评价页。

hh

2.2 给该功能打分

根据你对该功能的使用体验,选择对应的表情。

当你对该功能“不满意”或感觉“一般”时,请留下3字以上的宝贵意见;当你对该功能“很不满意”时,请留下7字以上的宝贵意见,并支持上传1-3张问题截图。

2.3 点击“提交”,我们将收到您的反馈。

二、审核服务评价

评价体系现覆盖审核服务的五大场景,包括:

开发者账号注册

应用创建上传

应用更新上传

信息变更

(应用/游戏)下架

hh

注意:评价入口仅在初次审核失败、重提申请时出现。评价步骤,同平台功能评价一致

小米开发平台风险应用审查标准

小米开发平台风险应用审查标准

为保障外部来源的应用在小米终端设备上具备良好的使用体验,小米统一对第三方移动智能终端应用软件(下称“应用”)及其下载渠道(含提供应用下载功能的第三方应用)在小米终端设备上的应用下载、安装等行为进行检测和管理。根据《网络安全法》、《互联网信息服务管理办法》、《移动智能终端应用软件预置和分发管理暂行规定》、《移动应用(APP)数据安全与个人信息保护白皮书》等法律法规、相关政策和通信行业标准,小米制定了《风险应用审查标准》(下称本标准),规定了风险应用类别,即存在下列行为的应用即为风险应用,可能会给用户的设备、数据、隐私或用户财产安全造成负面影响。

小米将通过安全中心内置的应用风险检测服务、用户举报、上架人工审核等渠道进行风险识别,在终端用户下载、安装应用的过程中,依据检测情况和风险严重程度进行相应的风险提示、安全引导、下载或安装限制、小米应用商店已检测版本安装提醒等操作。包括但不限于以下风险应用类别:

一、应用涉及政治敏感内容

应用内容涉及政治敏感、破坏社会稳定的信息。包括但不限于:

  • 对国家领导人诽谤、人身攻击或者侮辱性的内容
  • 含有关于宗教、种族、性取向、性别或其他目标群体的诽谤或恶意内容
  • 含有政治谣言、涉及反政府、反社会以及其他涉及政治敏感内容

二、应用涉及违禁品内容或违禁品交易

应用存在法律明确规定的违禁品内容或相关交易。包括但不限于:

  • 爆炸物品
  • 剧毒物品
  • 麻醉剂
  • 放射性物品
  • 香烟售卖
  • 枪支器械及其交易
  • 其他违禁品及其交易

三、应用涉及血腥暴力内容

应用含有血腥、暴力等引起用户不适的内容。包括但不限于:

  • 过分描述暴力
  • 对血腥场面过度展示
  • 含有虐待、侮辱性内容

四、应用涉及色情内容

应用包含色情内容或色情服务,如性器官的过分展示。包括但不限于:

  • 应用涉及色情内容
  • 允许应用使用者发布含有色情内容的文字、图片、视频、音频等
  • 应用内含有色情服务

五、应用涉及非法交易和非法金融行为

应用内含有法律违禁的交易和非法金融行为,包括但不限于:

  • 应用含有非法金融行为,包括但不限于违法私募基金、地下钱庄、高利贷、期货等
  • 应用含有非法金钱交易,包括但不限于违规销售彩票、赌博行为或其他法律禁止的金钱交易
  • 应用提供虚拟币交易或支付,包括但不限于如比特币、以太坊、其他虚拟币等

六、应用提供违规VPN服务

应用含违规支持境外软件访问的VPN相关功能,通过VPN功能导致违规内容传播。

七、应用存在病毒

应用内含有病毒等恶意代码,危害用户的安全。包括但不限于:

  • 木马
  • 蠕虫
  • 后门
  • 混合型恶意软件

八、应用涉及恶意扣费

在用户不知情或未授权的情况下,通过隐蔽执行、欺骗用户点击等手段,订购各类收费业务或使用移动终端支付。包括但不限于:

  • 在用户不知情或未授权的情况下,自动订购付费服务或者自动扣费
  • 应用通过非正常手段,如模拟系统窗口、替换按钮功能诱导用户点击、故意隐藏关键订购协议诱导用户同意付费等,直接进行扣费
  • 无二次确认的情况下,直接扣费
  • 诱导用户付费或者强制付费后未完整履行付费服务
  • APP造成用户财产损失且有持续、大范围扩散风险,且APP开发者不介入解决用户损失问题
  • 用户付费后未完整履行付费服务,或提供的付费服务与承诺存在偏差

九、应用隐私不合规

应用涉及在用户不知情或未授权的情况下侵犯个人隐私。包括但不限于:

  • 应用的隐私政策未向用户进行明示;
  • 应用的隐私政策未详细向用户说明,应用收集使用的个人信息目的、类型、方式
  • 应用内存在默认或强制用户同意隐私协议行为
  • 应用存在超范围收集个人信息及系统权限行为
  • 应用内强制用户授权,存在“不给权限不让用”的行为
  • 应用存在未用户同意收集个人信息行为
  • 应用实际收集使用个人信息行为与声明不一致
  • 应用未经用户同意向第三方企业提供个人信息
  • 应用未提供删除、更正或投诉举报的功能或渠道
  • 应用未提供有效的注销用户账号途径,或针对用户注销设置障碍
  • 应用存在强制收集用户个人信息,强迫用户使用定向推送功能

详情可参考:《应用隐私合规标准

十、应用含有恶意广告

应用以用户不希望的方式显示广告,包括损害或干扰设备功能的可用性,或在未经充分同意的情况下在触发应用环境之外的展示。包括但不限于:

  • 应用内广告不得频繁出现以弹窗、横幅、视频形式影响用户正常使用
  • 应用内广告需提供可关闭按钮,不得设置关闭障碍
  • 应用内广告不得欺骗误导用户,不得虚假宣传等诱导方式欺骗误导用户
  • 应用内广告不得存在“极限词”、涉黄等违反国家广告法相关内容
  • 应用广告不得抢占锁屏、桌面,影响用户正常使用

十一、应用涉及远程控制

应用在用户不知情或未授权的情况下,能够接受远程控制端指令并进行相关操作 ,具有远程控制属性。包括但不限于:

  • 在未经用户许可的情况下操作和篡改系统相关设置
  • 远程控制拍照录音上传

十二、应用存在系统破坏情况

应用通过感染、劫持、篡改、删除、终止进程等手段,导致移动终端或其它非恶意软件部分或全部功能、用户文件等无法正常使用;干扰、破坏、阻断移动通信网络、网络服务或其它合法业务正常运行。包括但不限于:

  • 导致移动终端硬件无法正常工作(黑屏、耗电异常等)
  • 导致移动终端操作系统无法正常运行(系统重启、无响应等)
  • 导致移动终端其它非恶意软件无法正常运行
  • 导致运营商通信网络无法正常工作
  • 在用户不知情或未授权的情况下,对系统设置进行修改(辅助功能、设备管理器、系统时间、系统角标等),导致用户无法再进行正常设置或运行正常功能
  • 在用户不知情或未授权的情况下,对用户文件、系统文件或其它非恶意软件进行病毒感染、劫持、篡改、删除、卸载、或限制运行等
  • 应用安装后无法卸载
  • 应用索取ROOT权限,或存在功能非ROOT手机无法使用的情况

十三、应用涉及诱骗欺诈

应用自动通过伪造、篡改、劫持短信、彩信、邮件、通讯录、通话记录、收藏夹、桌面等方式,诱骗用户,而达到不正当目的。包括但不限于:

  • 伪造、篡改、劫持短信,以诱骗用户,而达到不正当目的
  • 伪造、篡改、劫持彩信,以诱骗用户,而达到不正当目的
  • 伪造、篡改、劫持邮件,以诱骗用户,而达到不正当目的
  • 伪造、篡改通讯录,以诱骗用户,而达到不正当目的
  • 伪造、篡改收藏夹,以诱骗用户,而达到不正当目的
  • 伪造、篡改通讯记录,以诱骗用户,而达到不正当目的
  • 伪造、篡改、劫持用户文件,以诱骗用户,而达到不正当目的
  • 伪造、篡改、劫持用户网络交易数据,以诱骗用户,而达到不正当目的
  • 冒充国家机关、金融机构、移动终端厂商、运营商或其它机构和个人,以诱骗用户,而达到不正当目的
  • 伪造事实,诱骗用户退出、关闭、卸载、禁用或限制使用其它合法产品或退订服务

十四、应用存在流氓行为

应用执行后对系统没有直接损害,也不对用户个人信息、资费造成侵害的其它恶意行为统称为流氓行为。危险后果主要表现为,间接的对用户手机造成影响,使用户不能方便的使用手机,给用户手机带来安全隐患等。包括但不限于:

  • 应用存在模仿系统通知或警告的广告行为
  • 应用存在影响正常功能使用的广告(频繁弹出、弹出但无法立即关闭、弹框占屏幕50%以上且无法立即关闭等)
  • 在用户不知情或未授权的情况下,长期占用移动终端中央处理器计算资源
  • 在用户不知情或未授权的情况下,自动捆绑安装
  • 激活设备管理器,在用户不知情或未授权的情况下,删除或修改备份用户数据
  • 应用存在强制用户下载应用获取积分等行为
  • 在用户不知情或未授权的情况下,长期驻留系统内存
  • 在用户不知情或未授权的情况下,自动添加、修改、删除收藏夹、快捷方式
  • 导致用户按 back 键无法正常退出程序
  • 在应用内部,通过非强制下载但无下载过程、无法终止的方式下载推荐第三方应用

十五、应用功能存在问题及性能能耗不达标

应用功能存在问题,或在未经授权的情况下严重损害用户在终端设备上的使用体验。包括但不限于以下情况:

  • 应用频繁出现崩溃、闪退、停止运行、冻结等非正常运行现象
  • 应用无法正常安装、启动、升级、卸载
  • 应用的功能失效,或点击后无响应,或程序本身存在错误
  • 应用的分辨率适配未达标,导致画面失真、模糊或像素化
  • 支持横竖屏方向的应用,在两种方向所展现的功能不等同
  • 支持帐户登录功能的应用无法正常帐户登录
  • 应用在小米终端上,给系统造成重启、死机等,导致不能正常使用的影响
  • 应用的版本不是最新稳定版本,或低于小米应用商店检测到的同包名应用版本
  • 应用在冷启动时,加载时间超过1000毫秒,且未向用户提供响应反馈(进度提醒或同类提示信息)
  • 应用在热启动时,加载时间超过500毫秒,且未向用户提供响应反馈(进度提醒或同类提示信息)
  • 应用在页面跳转、功能切换等情况时, 加载时间超过600毫秒
  • 应用运行时占用CPU过高或者异常,导致小米终端卡顿、ANR现象
  • 应用运行时占用内存过高或者异常,导致小米终端卡顿、ANR现象
  • 同等条件下,应用的前后台功耗指标超过其行业同类应用平均水平的5%
  • 除用户主动选择的业务,开启与业务无关的设备资源
  • 应用进入后台后,仍有服务在运行(该服务与用户正在使用的应用功能相关,且是必要服务的不受此限制)
  • 应用进入后台后,未经用户选择,私自启动
  • 应用进入后台后,有持锁行为
  • 应用进入后台后,占用设备资源(比如,无线网络,摄像头等)
  • 应用进入后台后,伪装成前台应用
  • 应用存在菜单功能、付款功能、音视频播放等问题
  • 应用下载后无法正常使用,存在停止运营、闪退、黑白屏、花屏、安装失败等严重影响用户使用的问题
  • APP不维护、无网络连接、无内容完全无法使用等

十六、应用传播或分发其他风险应用

应用存在下载、安装风险应用的代码或者传播和分发《本标准》规定的风险应用类别。包括但不限于:

  • 应用已经含有风险应用
  • 包含可以下载、安装风险应用的代码

十七、应用涉及违规热更新

应用修改代码进行迭代后,被检测为《本标准》规定的风险应用类别。

若第三方应用属于《本标准》规定的风险应用类别,小米将在用户下载、安装、使用应用的过程中,视检测情况和风险严重程度采取包括不限于以下措施,以保障用户安全:

  • 进行风险提示和安全引导
  • 安装需通过小米账号、锁屏密码、指纹等方式验证
  • 收回应用权限使用权
  • 禁止安装或使用应用
  • 下架应用
  • 提示用户进行应用卸载

小米开发平台用户体验合规要求

小米开发平台用户体验合规要求

用户体验

做好用户体验、保障用户安全为小米一直以来所追求的目标。为保障用户权益,确保用户在应用下载、使用环节获得更安全、更可靠的使用体验,小米不允许应用或应用所提供的内容破坏用户对小米生态系统的信任,以及未经用户许可,进行安装(默认安装或默认勾选安装)或访问其他应用、游戏或软件(包括第三方提供的功能和体验)等行为。运行在小米设备上的应用所提供访问权限的所有内容,须符合本政策的各项条款且用户有权知晓。因此,开发者不得违反下述要求以及不得有其他损害用户权益及体验的行为,小米愿意与开发者共同努力,打造良好用户体验生态。

1、应用内容

基本要求

1、应用不得是简单打包的网站页面或套用模板、内容聚合、罗列链接、广告推广等,需具备实用价值及创意性,能为用户提供差异化、高质量的体验。

2、应用需为用户提供绿色、独特、高质量的应用内容,不得出现对用户有害或者不当的内容。

3、应用功能主要为应用分发(包括允许下载、更新、搜索应用/游戏等功能)的开发者,需提供所分发应用符合小米上架标准的检测证明、以及确保应用持续合规运营的保障方法,并通过小米合规检测后进行分发。

4、应用提供分发下载功能的,不得以提供“高速下载”、“安全下载”功能,捆绑下载其他应用分发平台或其他应用。用户主动启动应用时,应直接启动,不得附加其他应用分发平台或其他跳转的方式启动。

5、应用不得借助“辅助功能”等技术能力,在用户下载安装环节,通过自动点击安装、或仅通过确认隐私协议等方式,绕过用户对下载安装的确认,直接进行下载安装。

2、应用功能

安装与注册

1、应用不得出现无法正常安装、安装时提示解析失败、启动、卸载、运行崩溃或出现需借助第三方软件才可卸载的情况。

2、应用安装后至多能出现一个桌面快捷图标,不得出现多个桌面快捷图标。

基本功能与使用限制

1、基础功能

1.1 应用不得出现内容无法正常显示或无法获取等情况。

1.2 应用不得出现按钮或者链接点击无反应或报错。

1.3 应用不得安装或者运行前提示或者强制用户重启设备。

1.4 应用主功能不得无法使用,如应用功能有问题,小米有权在应用上添加必要的风险提醒或相关标识。

1.5 应用介绍或更新日志中介绍的功能不得与实际不符。

1.6 应用不得运行后提示更新版本,请确保应用为最新版本。

1.7 应用长时间停留(超过5秒)在闪屏/启动引导界面,无法进入功能页面。

1.8 应用界面必须保证清晰,不得出现模糊、拉伸、压缩、黑边等情况。

1.9 不能出现花屏、分辨率不匹配等分辨率异常。

1.10 正常网络下,不得出现不维护、无网络连接、无内容等无法使用的问题。

1.11 游戏类应用需保证画面清晰、音效清楚合理、操作体验流畅,不得出现画面内容模糊、中途切出游戏后声音仍不中断、实际触控区域与手机显示区域存在偏差等影响用户体验的情况。

2、广告规范

2.1 应用所提供的广告,须与应用使用的群体相适用。

2.2 面向儿童的广告内容,必须适合儿童观看,不得包含欺骗性内容,或极易导致儿童用户无意间触发行为的内容。

2.3 禁止出于广告目的,强制用户必须点击/观看广告,或提交个人数据才能完整使用应用的行为。

2.4 应用所提供的广告,不得出现干扰应用运行和设备功能的行为,以及直接或间接影响用户正常使用的情况。

2.5 应用不得伪装成系统、官方或其他第三方应用推送广告及活动,或进行匿名推送的行为。

2.6 应用不得在锁屏、桌面等设备功能页面,推送广告或其他活动内容。

2.7 应用在通知栏区域的广告和活动内容,应允许用户清除或关闭。

2.8 针对游戏类应用内广告:

2.8.1 游戏内广告需完美适应屏幕方向,如:横屏游戏不得接入和提供竖屏开屏广告。

2.8.2 横幅、插屏广告必须可以关闭,且关闭区域清晰明确,关闭后30s内不得再次弹出展示。

2.8.3 插屏广告不得在游戏进行中弹出,且不得在继续游戏或返回游戏场景切换时弹出广告。

2.8.4 不得使用插屏视频广告作为激励视频广告。

2.8.5 激励视频广告必须由用户主动触发,在视频结束后必须可关闭且关闭区域清晰明确,对应奖励必须在游戏内发放兑换,不得出现奖励不到账、或实际奖励与承诺存在不一致的情况。

3、应用内付费

1、 在充值场景下,用户支付完成须即时到账,到账金额需与实际支付金额一致。

2、对用户已支付费用,但应用未提供对应服务的情况,须及时退费。

3、用户在付费环节支付失败或无法调起支付,须明确告知用户。

4、在应用内或信息介绍中,须注明付费未到账的反馈渠道(客服电话或联系邮箱)或处理方式。

5、应用不得在支付失败、取消支付后,出现无法运行、或强制付费才能使用的情况。

6、应用须合理定价,不得出现定价过高或价格欺诈的行为,实际展示的支付金额,必须与用户在支付环节所需支付的金额一致。

7、应用不得含有不正当吸费行为,包括但不限于:未经用户二次确认主动扣费(即用户需要对购买和支付分别进行一次确认)、隐形扣费行为,未明确、明显提示用户(例如收费协议嵌套在应用引导页内),以误导或诱导方式实现用户付费。

8、应用内容不得含有引导、要求用户进行异常交易,包括但不限于客服引导充值或添加QQ/微信开通VIP等非应用内直接交易形式。

9、应用所有付费项目,须明示用户付费后能使用的功能,在用户已完成付费后,不得二次收费。

10、儿童类应用内支付功能不得存在诱导儿童支付内容(除非其保留在受家长监控的指定区域中),如短代支付,外链接支付等无需输入密码的快捷支付功能。

4、广告标识符规范

1、应用或SDK在使用广告标识符时,只能用于广告分析,以及用户行为和身份分析。

2、不得通过获取系统没有提供撤回能力的,可关联用户的信息,用于广告和用户分析。包括但不限于:CPUID、BOOT_ID、SN、MAC地址、IMEI等。

3、应用每次使用“设备标识”和“虚拟身份ID”时,都必须验证MIUI系统的“虚拟身份管理”状态(是否允许使用设备标识),如果用户已开启“虚拟身份保护”,您不得基于“设备标识”和“虚拟身份ID”收集和使用数据。

4、广告标识符重置后,在未获得用户明确许可的情况下,新的广告标识符不得与先前的广告标识符或由其衍生的数据相关联。

5、应用若因业务所需而与任何第三方共享广告标识符,对方也必须遵守广告标识符相关条款。

5、损害用户权益的行为

影响用户正常使用

1、流氓行为

1.1 应用在用户不知情或未授权的情况下,长期占用移动终端中央处理器计算资源。

1.2 应用在用户不知情或未授权的情况下,长期驻留系统内存。

1.3 应用在用户不知情或未授权的情况下,自动添加、修改、删除收藏夹、快捷方式。

1.4 应用无法正常退出,或应用安装后无法卸载。

1.5 应用不得含有隐藏或不被用户感知或发现的功能。

2、干扰

应用对其他应用程序进行干扰、屏蔽或弹窗等,导致其他应用程序无法正常使用,其中包括含有修改其他应用数据,游戏存档等功能的应用。

3、第三方安装来源应用

针对第三方安装来源的应用,在无法确认安装包体安全合规、安装动作为用户主观意愿的情况下,会通过验证手机密码等方式,证明此次安装行为是用户自主操作且符合用户预期。

非正常扣费或损害用户利益

1、非正常扣费

1.1 在用户不知情或未授权的情况下,应用自动订购付费服务或自动扣费。

1.2 应用通过非正常手段直接进行扣费,如模拟系统窗口/提示、替换系统功能按钮诱导用户、隐藏关键订购协议诱导用户同意付费。

1.3 用户付费后未完整履行付费服务,或提供的付费服务与承诺存在偏差。

1.4 应用造成用户财产损失且有持续、大范围扩散的风险,且应用开发者不介入解决用户损失问题的情况。

2、资源消耗

2.1 应用在用户不知情或未授权的情况下,自动拨打电话。

2.2 应用在用户不知情或未授权的情况下,自动发送短信。

2.3 应用在用户不知情或未授权的情况下,自动发送彩信。

2.4 应用频繁连接或尝试连接网络,产生异常数据流量,造成用户财产损失。

3、违规下载器

具备分发应用能力的应用,分发存在违法违规风险的应用,或未经过用户允许、诱导用户产生下载行为。

欺骗或误导用户

1、 通过破解或未经授权的使用行为,或伪装或盗用其他应用名称、icon的行为,或实际界面伪装成其它正常应用的行为,误导用户执行对原始受信任应用程序的相关操作。

2、通过伪造、篡改、劫持,如短信、彩信、邮件、通讯录、通话记录、收藏夹、桌面或其他常用应用等,诱骗用户从而达到不正当目的。

3、 应用利用变号软件进行机身电话号码伪装,对用户进行诈骗或用于其他违法违规行为。

攻击/破坏系统或设备运行

1、应用存在如导致系统崩溃、系统重启、无响应等系统破坏行为。

2、应用导致移动终端硬件无法正常工作,如黑屏、耗电异常等。

3、应用导致移动终端其它非恶意软件无法正常运行。

4、应用导致运营商通信网络无法正常工作,或资源消耗异常。

5、在用户不知情或未授权的情况下,对系统设置进行修改(辅助功能、设备管理器、系统时间、系统角标等)导致用户无法再进行正常设置或运行正常功能。

6、在用户不知情或未授权的情况下,对用户文件、系统文件或其它非恶意软件进行病毒感染、劫持、篡改、删除、卸载、或限制运行等。

7、应用强制索取ROOT权限,或提示部分/全部应用功能非ROOT手机无法使用。

8、利用系统已知安全漏洞、或私自调取未发布的系统能力,用于实现商业目的或导致用户信息安全和使用体验受到影响。

小米开发平台生态政策

总则

小米始终秉持着建设健康生态、维护系统安全、保障用户合法权益与个人信息安全的理念,并不懈努力的为用户提供更好的产品体验。为此,小米制定了《小米开发者生态政策》(以下简称:本政策)。在小米设备上安装运行的应用应符合本政策要求。随着法律法规、行业规范、当代社会价值观的动态更新,小米也将定期对《小米开发者生态政策》进行更新。

技术

1、兼容

在小米设备上运行的应用需适配小米、Redmi两年内发售的机型,以及当前主流安卓版本,且必须通过小米的兼容性要求,不得出现以下情况:

1、应用频繁出现崩溃。

2、应用无法正常安装、启动、卸载。

3、功能未实现或点击后无响应或程序本身存在错误。

4、应用显示的图像、文本和其他界面元素有明显的失真、模糊或像素化。

5、支持横屏和竖屏方向的应用,在出现两种方向展现时,未匹配相同的特征和操作,或提供相匹配的功能。

2、稳定

在小米设备上运行的应用必须通过小米的稳定性要求,不得出现以下情况:

1、应用在小米设备上出现崩溃、强制关闭、冻结或不正常运行现象。

2、应用版本不是最新的稳定版本,或比小米应用商店在架检测过的同包名应用版本低。

3、安全

在小米设备上运行的应用必须通过小米的安全要求,不得出现以下安全不达标的情况:

1、应用含有病毒木马等侵害用户的功能(包括代码等可疑行为),并限制下载或安装。

2、应用不得下载、安装或执行会引入或更改应用特性或功能的代码,也不得含有第三方加载可执行代码的应用或SDK,也不得下载、安装或执行会引入或更改APP特性或功能的代码,包括其他APP。

3、除支持核心功能而需要的最低级别权限外,应用擅自申请其他无关的权限。

4、应用请求访问与核心功能不相关的敏感数据(例如通讯录或系统日志)或访问用户付费服务(例如:拨号器、短信或频繁自动联网)的权限。

5、影响手机功能,包括但不限于:安装后自动修改系统默认配置且用户无法修改,功能键失灵等。

6、应用签名、应用文件与小米应用市场检测过的同包名应用的签名与应用文件不一致。

7、同名应用因含有的支付、推送等SDK不同,或被第三方加固、重新打包或添加渠道号等差异化处理后,未在小米应用市场进行过安全检测。

4、性能

在小米设备上运行的应用必须通过小米的性能要求,不得出现以下性能不达标的情况:

1、应用在冷启动的时候未考虑用户操作的响应速度,若加载时间超过1000毫秒,且在屏幕上未向用户提供反馈(进度指示器或类似提示),则不满足性能要求。

2、应用在进行页面或功能切换的时候未考虑用户操作的响应速度, 若加载时间超过500毫秒,则不满足性能要求。

3、应用未满足良好用户体验,出现使用不流畅等现象。

4、应用在运行时未充分考虑CPU占用是否过高或者异常,导致终端出现卡顿、ANR现象。

5、应用在运行时未充分考虑内存占用是否过高或者异常,导致终端出现卡顿、ANR现象。

5、功耗

在小米设备上运行的应用必须通过在小米的功耗要求,不得出现以下功耗不达标的情况:

1、应用转入后台时,有服务处于运行状态(该服务与应用核心功能相关且必要的除外)。

2、应用转入后台时,未主动释放占用资源。

3、应用转入后台后,私自启动。

4、应用转入后台时,有持锁行为。

5、应用转入后台时,占用系统资源(例如,占用蓝牙以及GPS系统资源等)。

小米开放平台应用分阶段发布操作指南

小米开放平台应用分阶段发布操作指南

1、功能介绍

在应用发布新版本时,您可以采用分阶段发布的方式进行应用版本更新。采用分阶段发布,您可以先向一定比例的用户发布更新的版本,快速获取用户对新版本的反馈意见,验证产品功能的稳定性,降低全量发布可能出现的风险及影响范围。

(目前该能力覆盖范围仅限应用,游戏暂不支持,且该能力处于内测阶段,如需开通,请联系 zhouyanjie@xiaomi.com ,并提供开发者ID、应用名称、应用包名)。

2、操作说明

2.1 使用分阶段发布能力

前提条件:您的APP当前上架版本为全网发布时,可提交新版本并设置为分阶段发布(即分阶段发布只适用于应用版本更新环节)。

操作路径:小米开放平台 – 应用列表 – 管理 – 应用详情页 – 更新版本。

2.2 创建分阶段发布版本

在“发布类型”区域下设置相关参数。

参数说明
发布类型选择“分阶段发布”;
生效时间分阶段发布的生效周期;
分阶段发布开始时间不得早于当前时间,结束时间必须大于开始时间,生效周期最大30天。达到生效结束时间后,分阶段发布版本将自动转全网发布。
暂停状态下,不会自动转全网发布;
到达结束时间后操作默认为到达结束时间后推送全网发布,也可选择暂停分阶段发布;
发布百分比请输入整数或小数,数值必须大于0且小于100。如果输入小数,则最多保留小数点后1位。对同一个分阶段发布版本,要求发布百分比数值逐渐变大;
分阶段发布说明填写本次分阶段发布的备注信息,如发布特性等,限500字以内。此说明不对用户或小米审核人员展示,仅展示在版本信息页面,供开发者自己参考;

完善其他相关信息后,点击“提交审核”,确认版本号无误后点击“确认”。提交成功后,应用版本状态更新为“审核中”。

2.3 管理分阶段发布版本

审核期间,在应用详情页可以对分阶段发布版本查看详情、撤销审核;

审核通过后,小米商店将按设置的生效时间和发布百分比分发该版本,正式版本和分阶段发布版本将同时在架。开发者可以在应用详情页查看、更新资料和更新发布管理;

在“发布管理”页面,可查看分阶段版本的发布状态、发布设置、发布说明等,并进行更新分阶段发布、全网发布、暂停分阶段发布、恢复分阶段发布、取消分阶段发布操作。

2.3.1 暂停分阶段发布

分阶段发布生效后,点击“暂停分阶段发布”,认真阅读弹出的提示框内容后,点击“确认”,分阶段发布版本将在小米应用商店暂时下架,即发布范围内的所有用户均暂时无法在小米应用商店搜索到该版本的应用。

2.3.2 恢复分阶段发布

分阶段发布暂停期间,点击“恢复分阶段发布”按钮,在弹窗中点击“确定”,该分阶段发布将在小米应用商店恢复上架,按照设置的生效时间和发布百分比继续分发,且恢复分阶段发布的申请无需人工审核。

恢复分阶段发布参数说明
生效时间起始时间:不支持修改;
结束时间:支持修改,您需要保证整个分阶段发布的生效周期不超过30天;
发布百分比支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,需大于等于上一次的百分比数值;
分阶段发布说明支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,建议大于上一次的百分比数值。

2.3.3 更新分阶段发布

在分阶段发布审核通过但尚未达到生效时间以及在分阶段发布生效期间内,您均可以执行更新分阶段发布操作,且更新分阶段发布的申请无需人工审核。

更新分阶段发布参数说明
生效时间起始时间:不支持修改;
结束时间:支持修改,您需要保证整个分阶段发布的生效周期不超过30天;
发布百分比支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,需大于等于上一次的百分比数值;
分阶段发布说明支持修改。对于同一个分阶段发布版本,每修改一次发布范围的百分比,建议大于上一次的百分比数值。

2.3.4 取消分阶段发布

分阶段发布未生效和已生效期间,点击“取消分阶段”按钮,认真阅读弹出的提示框内容后,在弹窗中点击“确定”,可以取消分阶段发布,取消后,该版本将在小米应用商店下架,取消分阶段发布无需人工审核。

2.3.5 分阶段发布转全网发布

  • 自动转全网发布:如您之前在发布配置- 结束时间后操作选择的是“推全网发布”则分阶段发布的生效周期结束后,将自动转全网发布版本;
  • 手动转全网发布:点击“恢复分阶段发布”或“更新分阶段发布”,“发布类型”选择“全网发布”,即可将分阶段发布版本转为全网版本。

注:分阶段发布版本转为全网版本后,帐号持有者会收到邮件通知。

2.3.6 下架分阶段发布版本

  • 取消分阶段发布后,分阶段发布版本会立即下架,无需人工审核;
  • 应用下架审核通过后,分阶段发布版本也将随之下架。

2.4 提交新版本

当APP的各版本都审核完成时,点击全量版本操作栏的“更新版本”按钮,“发布类型”选择全网发布或分阶段发布,可更新正式版本或分阶段发布版本。提交审核后,当前在架的分阶段发布版本将下架。

3、常见FAQ

1)设置的比例代表什么含义?

以设置10%为例,代表在小米应用商店内有10%的活跃用户可以看到您的新版本;

2)该包是否会影响到正常版本的分发?

使用该能力后,新包和旧包同时保持上架,新包仅分发给设置的比例所命中用户群;

3)如果使用分阶段发布的新包有问题,想上传新的包去覆盖怎么操作?

只要保证新包版本号大于上一次的包即可;

4)分阶段发布是否支持同版本更新?

暂不支持。

小米开放平台应用创建操作指南

小米开放平台应用创建操作指南

本文档介绍了创建应用流程,您可在了解文档内容后进行应用发布。

1、登录小米应用商店开发者站官网,点击“创建应用”,即可开始应用首次创建。


2、点击“创建应用”及进入创建包名页面,在此页面您需要填写语言、操作系统、应用名称、应用包名等信息。

项目说明备注
默认语言应用展示与操作时默认呈现给用户的语言类别
操作系统应用适用的系统
应用名称上传应用的官方全称
应用包名应用的唯一标识不可创建已存在包名

3、创建包名后,进入到完善资料页,完成应用安装包的上传,如应用包括拓展包与安装包,请一并上传。

项目说明备注
单包上传支持上传64位安装包或32/64位兼容包具体相关内容请参考32/64分包上传说明
双包上传需同时上传32位和64位两个安装包
主扩展包基本包的补充扩展软件
副扩展包若您需要上传两个扩展包,请将第二个扩展包上传至副扩展包处

4、若您的应用被检测到需要获取用户的敏感权限,请您按照相关权限项目进行说明,以便用户理解您获得权限的目的。

项目说明备注
获取定位您的应用将会获取用户定位,请您说明获取定位的目的
拨打电话您的应用将会利用用户设备拨打电话,请您说明拨打电话的目的
读取联系人您的应用将会获取用户联系人信息,请您说明读取联系人的目的
获取手机信息您的应用将会获取用户手机信息,请您说明获取手机信息的目的
录音您的应用将会获取为用户录音,请您说明获取录音的目的

5、完善应用的发布设置,根据需要选择应用的兼容设备、分类、发布地区与上线时间方式。

项目说明备注
兼容设备您的应用可下载与使用的设备类型
一级分类包含VR、实用工具、影音视听、聊天社交、图书阅读、学习教育、效率办公、时尚购物、居家生活、旅行交通、摄影摄像、医疗健康、体育运动、新闻咨询、娱乐消遣、金融理财等分类选择符合应用主要功能的分类项目,如应用符合多个分类,则可以自由选择,但不能选择无关的分类
二级分类根据一级分类对您的应用进行再次细分
分发地区应用可以下载并适用的地区如勾选其他海外地区,审核通过后,应用将会根据选择发布到对应海外地区
上线时间方式应用通过审核后上线时间方式选择如对上线时间无特殊要求,可选择“审核通过后立即上线”。如选择定时发布,则无法取消或更改时间。

6、填写应用本地化语言信息,星号标注为必填项,填写完毕请阅读小米应用商店应用品牌展示图注意事项并勾选“我已阅读并同意”。

项目说明备注
应用名称上传应用的官方全称具体审核规范请参考应用审核规范
应用图标展示在用户桌面的应用图标,需与apk包内图标一致具体审核规范请参考应用审核规范
版本名应用版本的标识号
开发者名称展示给用户的开发者名称应用信息内填写的开发者名称与提交应用审核使用的账号主体内开发者信息需保持一致
关键字用户通过关键字搜索到应用可以提供多个关键字,以空格隔开
一句话简介以一句话简单介绍应用勿使用极限词和虚假承诺等违反新广告法的内容;勿使用疑问、反问等句式;保持在17个汉字或34个字符之内,句末勿加标点。
应用介绍对应用功能、亮点的准确介绍,吸引用户如实介绍应用功能和亮点,方便用户快速上手,勿呈现过多的SEO优化和空行。
隐私政策为了保护用户隐私而制定的政策措施,内容须包括该APP收集使用个人信息的目的、方式和范围具体政策参考应用添加隐私政策声明的重要通知
官网链接非必填。您公司官方网站的地址
测试账号非必填。若您的应用需要注册账号才能使用,请提供可以用于测试的账号与密码该账号将用于应用审核流程,将不会展示给用户
项目说明备注
应用截图应用内相关场景截图
手机截图使用手机操作应用时呈现的截图应用图片信息如需使用到手机外观图片,禁止使用 iPhone 或其他品牌手机外观素材,应用图片信息中系统状态栏禁止存在与本应用无关的第三方应用图标。
应用视频介绍非必填。以视频的形式介绍您的应用应用视频在驳回状态是无法删除的,请在重新提交审核后发送应用视频删除申请至问题工单系统
应用品牌展示图非必填。是小米应用商店为开发者提供的一项对应用品牌的直观展示服务该项已不展示给用户

7、完善行业资质证明。

项目说明备注
ICP 备案号国家对经营性互联网信息服务实行许可制度;对非经营性互联网信息服务实行备案制度。未取得许可或者未履行备案手续的,不得从事互联网信息服务开发者需要提供ICP备案截图,或ICP证和ICP备案号以证明资质
版权证明APP电子版权认证证书为您的app电子版的著作权证明,纸质软件著作权证书为您的app知识产权证明文件
免责承诺函对于承诺书的中提到的内容免除责任的一种形式相关承诺函模板请参考常见保证(承诺)函模板,若应用不符合单本图书/书城类、理财类、医疗类三种中的一种,建议开发者提供书城类承诺函
特殊资质代理证书金融理财类、影音视听类、图书阅读类、新闻资讯类、实用工具类、聊天社交类、医疗健康类应用需提交ICP证或ICP备案截图等资质或代理授权书具体要求请参考特殊行业资质要求
应用安全评估报告针对具有舆论属性或社会动员能力的互联网信息服务的主体进行评估后产出的报告
非必填项,按需填写

8、完善联系人信息并提交审核。

注:若未出现【联系人信息】模块或在【联系人信息】板块如果未展示输入验证码,请在【本地化语言信息】板块将本地化语言切换为简体中文。

9、提交审核后应用状态更新为等待审核,我们会在1-3个工作日内为您审核。

小米开发平台应用调用Camera预览效果适配说明

小米开发平台应用调用Camera预览效果适配说明

1.应用中拍摄或扫一扫功能预览页面出现拉伸现象

由于不同手机屏幕尺寸比例不尽相同,或许应用在调用Camera预览实现方法不标准或第三方SDK维护不及时,提供的预览窗口宽高比例和Camera输出图像的宽高比例不一致,以至于应用在使用拍摄或扫一扫功能时预览页面就可能出现拉伸现象。

在此建议应用开发者使用的预览窗口宽高比例和Camera输出图像的宽高比例尽量保持一致,这样预览显示的画面即可以正常显示。为了解决应用频繁适配工作,希望开发者参考标准的Camera预览使用示例实现功能。

2.Camera预览接口使用示例

2.1.获取Camera支持的预览图像输出分辨率

//Camera API1
Camera mCamera = Camera.open(cameraId);
List<Size> supportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes()
 
//Camera API2
Size[] supportedPreviewSizes = CameraManager.getCameraCharacteristics(cameraId).get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(klass)

2.2.根据预览窗口Surface的宽高来选取最佳Camera图像输出尺寸

  • Camera API1:
//获取预览窗口的宽高
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // We purposely disregard child measurements because act as a
    // wrapper to a SurfaceView that centers the camera preview instead
    // of stretching it.
    final int width = resolveSize(getSuggestedMinimumWidth(),
            widthMeasureSpec);
    final int height = resolveSize(getSuggestedMinimumHeight(),
            heightMeasureSpec);
    setMeasuredDimension(width, height);
 
    if (mSupportedPreviewSizes != null) {
        mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes, width,
                height);
    }
 
    if (mCamera != null) {
      Camera.Parameters parameters = mCamera.getParameters();
      parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
 
      mCamera.setParameters(parameters);
    }
}
//得到最佳Camera图像输出尺寸
public Camera.Size getOptimalSize(@NonNull List<Camera.Size> sizes, int w, int h) {
    final double ASPECT_TOLERANCE = 0.1;
    double targetRatio = (double) w / h;
    Camera.Size optimalSize = null;
    double minDiff = Double.MAX_VALUE;
 
    int targetHeight = h;
 
    for (Camera.Size size : sizes) {
      double ratio = (double) size.width / size.height;
      if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
      if (Math.abs(size.height - targetHeight) < minDiff) {
        optimalSize = size;
        minDiff = Math.abs(size.height - targetHeight);
      }
    }
 
    if (optimalSize == null) {
      minDiff = Double.MAX_VALUE;
      for (Camera.Size size : sizes) {
        if (Math.abs(size.height - targetHeight) < minDiff) {
          optimalSize = size;
          minDiff = Math.abs(size.height - targetHeight);
        }
      }
    }
 
    return optimalSize;
  }

详细实现见:https://cs.android.com/android/platform/superproject/+/master:development/samples/HoneycombGallery/src/com/example/android/hcgallery/CameraFragment.java

  • Camera API2:
//获取预览窗口的宽高
private final TextureView.SurfaceTextureListener mSurfaceTextureListener
        = new TextureView.SurfaceTextureListener() {
 
    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) {
        openCamera(width, height);
    }
 
    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int width, int height) {
        configureTransform(width, height);
    }
 
    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture texture) {
        return true;
    }
 
    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture texture) {
    }
 
};
//得到最佳Camera图像输出尺寸
private static Size chooseOptimalSize(Size[] choices, int textureViewWidth,
        int textureViewHeight, int maxWidth, int maxHeight, Size aspectRatio) {
 
    // Collect the supported resolutions that are at least as big as the preview Surface
    List<Size> bigEnough = new ArrayList<>();
    // Collect the supported resolutions that are smaller than the preview Surface
    List<Size> notBigEnough = new ArrayList<>();
    int w = aspectRatio.getWidth();
    int h = aspectRatio.getHeight();
    for (Size option : choices) {
        if (option.getWidth() <= maxWidth && option.getHeight() <= maxHeight &&
                option.getHeight() == option.getWidth() * h / w) {
            if (option.getWidth() >= textureViewWidth &&
                option.getHeight() >= textureViewHeight) {
                bigEnough.add(option);
            } else {
                notBigEnough.add(option);
            }
        }
    }
 
    // Pick the smallest of those big enough. If there is no one big enough, pick the
    // largest of those not big enough.
    if (bigEnough.size() > 0) {
        return Collections.min(bigEnough, new CompareSizesByArea());
    } else if (notBigEnough.size() > 0) {
        return Collections.max(notBigEnough, new CompareSizesByArea());
    } else {
        Log.e(TAG, "Couldn't find any suitable preview size");
        return choices[0];
    }
}

详细实现见:https://cs.android.com/android/platform/superproject/+/master:development/samples/browseable/Camera2Basic/src/com.example.android.camera2basic/Camera2BasicFragment.java

2.3.将获取到的最佳图像输出尺寸设置到Camera

//Camera API1
mCameraParameters.setPreviewSize(size.getWidth(), size.getHeight())
 
//Camera API2
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight())

小米开发平台屏幕指纹设备适配说明

小米开发平台屏幕指纹设备适配说明

1. 什么是屏下指纹

小米 8 透明探索版中,我们引入屏下指纹这项新技术,即指纹传感器嵌入屏幕下。

由于是屏下指纹,所以需要出现指纹图标,提示用户指纹传感器的位置,但这样会和部分需要使用指纹验证的业务产生冲突。

2. 屏下指纹相关接口

由于各个开发者的指纹验证逻辑和 UI 样式非常不一样,所以系统不打算统一大家的样式,而是会提供相关接口,由各业务组做针对性地适配。

2.1. 是否为屏下指纹设备

// true means FOD project
PRODUCT_PROPERTY_OVERRIDES += ro.hardware.fp.fod=true

2.2. 指纹传感器的位置、大小(每次指纹验证都需要重新获取)

以下是 Android O 的接口:

//location of FOD sensor's top left corner in pixel, the top left corner of screen is (0,0)
//persist.sys.fp.fod.location.X_Y 表示sensor区域左上角的坐标,以pixel为单位,以物理屏幕左上角为(0,0)计算。
persist.sys.fp.fod.location.X_Y = 453,1640 //sensor的大小(单位也是pixel) persist.sys.fp.fod.size.width_height = 173,173

以下是 Android P 的接口(应谷歌要求,需要加入「vendor」字样)

//location of FOD sensor's top left corner in pixel, the top left corner of screen is (0,0)
// persist.vendor.sys.fp.fod.location.X_Y 表示sensor区域左上角的坐标,以pixel为单位,以物理屏幕左上角为(0,0)计算。
persist.vendor.sys.fp.fod.location.X_Y = 453,1640

//sensor的大小(单位也是pixel)
persist.vendor.sys.fp.fod.size.width_height = 173,173

因为同一款设备,市场上可能会同时存在 Android O 和 Android P 两个版本,所以开发者需要根据 Android 版本调用不同的接口,以获取正确的位置信息。

2.3. 控制指纹图标显示、消失

调用标准的指纹监听接口即可显示指纹图标。

2.4. 指定指纹图标的颜色(黑色或白色)

由于各个业务组的界面不尽相同,我们会提供一个接口,让业务方指定要用「黑色」还是「白色」的指纹图标。

复用原有 flag 中的「0」「1」标志(原flag标志没有使用),0表示黑色,1表示白色。

mFm.authenticate(null, mCancellationSignal, 0, callback, null); // 黑色指纹图标(默认)
mFm.authenticate(null, mCancellationSignal, 1, callback, null); // 白色指纹图标

3. 屏下指纹适配建议

3.1. UI 避开指纹传感器的位置

业务方可以通过上述接口获取指纹图标的位置和大小,建议控件、键盘等元素都避开那个区域。

3.2. 不建议同时支持密码验证和指纹验证

由于指纹图标会挡住键盘,所以不建议开发者同时支持指纹和密码验证,而是做成互斥的模式,类似微信支付。

3.3. 考虑是否需要调整正确、错误的反馈

如果第三方调用,系统不处理指纹验证正确或错误的反馈,交由开发者自行处理。开发者可以根据自身业务逻辑,考虑是否需要针对屏下指纹调整相关反馈。

4. FAQ

4.1. 有几款机型支持屏下指纹

小米机型中,目前支持屏下指纹的设备为「小米 8 透明探索版」和「小米8 屏幕指纹版」。

4.2. 如何测试

拿到设备后,建议同时测试以下两个版本的效果:

  • MIUI 9 稳定版,即出厂自带的版本,截至2018年底仍会是该机型用户的主要版本。
  • MIUI 10 开发版或稳定版,后续 MIUI 10 将成为 MIUI 系统的主流,又因为 System UI 的代码架构在MIUI 10有较多调整,所以建议同时覆盖测试。

顺便附上ROM下载链接如下:

小米开发平台亮度适配说明

小米开发平台亮度适配说明

1.  前言

为了使亮度调节更加细腻, MIUI对原生亮度级别进行了扩展, 由原有的255级调整根据不同屏幕分别支持255/1023/2047/4095级。开发者在进行亮度调整时需要先去确认机型亮度的最大值和最小值,然后进行比例调整。

2.  机型最大和最小亮度确认方法

基于Android P以上的MIUI亮度级别支持超过255, 可通过如下方式确认最大值和最小值:

        public int getMaximumScreenBrightnessSetting() {

            return mContext.getResources().getInteger(mContext.getResources()

                    .getIdentifier(“config_screenBrightnessSettingMaximum”, “integer”, “android”));

        }

        public int getMinimumScreenBrightnessSetting() {

            return mContext.getResources().getInteger(mContext.getResources()

                    .getIdentifier(“config_screenBrightnessSettingMinimum”, “integer”, “android”));

        }

小米开放平台相机各场景下3A操作适配说明

小米开放平台相机各场景下3A操作适配说明

1.Preview

在预览时AF可以由App控制触发对焦,也可以底层自动对焦,推荐使用底层自动对焦。

1.1.App手动对焦设置

  • CONTROL_AF_MODE_AUTO并不是AF自动模式,根据Google定义,是由App进行手动触发。App控制触发对焦逻辑是设置AF为Auto,然后App主动触发对焦。
  • App使用CONTROL_AF_TRIGGER触发对焦。CONTROL_AF_TRIGGER使用建议,CANCEL – START – IDLE;App何时触发对焦由App决定,比方App检测到加速度计和陀螺仪变化达到一定的阈值或者app为扫码软件,检测扫码一直无法解析扫码结果等(因为出现这种场景时物距发生了变化或者焦点模糊),具体场景具体调整。对于扫码等APP还可以设置AF测量区域,CONTROL_AF_REGIONS,尽量使用中心区域作为对焦点。

1.2.AF自动对焦设置

可以先检测AF有效模式,如果支持CONTINUOUS_PICTURE,设置即可,具体如下:

mCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES),CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE))。

CONTROL_AF_MODE设置为CONTROL_AF_MODE_CONTINUOUS_PICTURE。

2.Video

  • 可以先检测AF有效模式,如果支持CONTINUOUS_VIDEO,设置即可,具体如下:
mCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES),CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_VIDEO))。

CONTROL_AF_MODE设置为CONTROL_AF_MODE_CONTINUOUS_VIDEO。

  • 注释

CONTROL_AF_MODE_CONTINUOUS_PICTURE和CONTROL_AF_MODE_CONTINUOUS_VIDEO的区别是前者在AF时会快速收敛,后者在AF时慢速收敛,因为录制视频时为了防止图像抖动,收敛过程需要慢一点,共同点是二者都为自动对焦。

3.Touch

Touch是为了在预览时对特定的区域进行3A权重提高,以便于得到预期的图像。当touch预览窗口某区域时,通用的操作流程是设置CONTROL_AF_REGIONS,CONTROL_AF_TRIGGER的流程还是CANCEL – START – IDLE。

4.Flash

Flash的实用场景通常在Touch,拍照和录像情况下使用,flash有两种操作模式,手动模式和自动模式,具体操作如下:

4.1.手动模式,即Torch模式

当需要打开flash时,设置CONTROL_AF_MODE为OFF/AUTO模式,同时设置FLASH_MODE为torch即可。

4.2.自动模式

自动模式是flash交给底层AE算法控制,具体如下两种常用模式:

ON_AUTO_FLASH:设置AF_Mode为此模式表示flash由AE根据当前亮度进行打开,关闭。

ON_ALWAYS_FLASH:设置AF_Mode为此模式表示flash每次操作都会打开。

5.拍照

拍照操作流程通常为触发3A,等待3A收敛,获取到3A收敛结果,进行拍照请求。

5.1.触发3A操作

CONTROL_AE_MODE根据是否需要闪光灯设置为ON_AUTO_FLASH,ON_ALWAYS_FLASH,ON。

CONTROL_AE_PRECAPTURE_TRIGGER设置建议 CANCEL-START-IDLE。

CONTROL_AF_MODE设置为AUTO,CONTINUOUS_VIDEO都可以。

CONTROL_AF_TRIGGER设置建议CANCEL-START-IDLE。

5.2.等待3A状态收敛

根据CaptureResult的metadata获取3A状态,如果3A都收敛了即可请求拍照

result.get(CaptureResult.CONTROL_AF_STATE);   //AF_State

result.get(CaptureResult.CONTROL_AE_STATE);   //AE_State

result.get(CaptureResult.CONTROL_AWB_STATE); //AEB_State 

5.3进行拍照请求

CONTROL_AE_MODE根据是否需要闪光灯设置为ON_AUTO_FLASH,ON_ALWAYS_FLASH,ON。

CONTROL_AF_MODE设置为AUTO,CONTINUOUS_VIDEO都可以。

最终下发拍照请求:

mCaptureSession.capture(request, mCaptureCallback, mBackgroundHandler); 

6.参考

https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics
https://developer.android.com/reference/android/hardware/camera2/CaptureRequest
https://github.com/googlearchive/android-Camera2Raw