小米开发平台隐身模式三方应用适配文档

小米开发平台隐身模式三方应用适配文档

说明:若不涉及到使用录音、相机、麦克风权限,则可忽略此项适配

1.MIUI「隐身模式」功能

功能效果:

  • 用户开启该模式后,应用将无法使用ACCESS_FINE_LOCATION、CAMERA、RECORD_AUDIO三项权限
  • 应用请求对应权限时,系统会弹出通知告知用户“隐身模式已开启,应用无法xx”,但为避免频繁打扰用户,该通知有弹出策略,所以并不会每次应用使用权限时都弹出,如下图:

2.需适配的场景:

若三方应用在隐私模式开启状态下,因无法使用定位、相机、麦克风而无任何提示,且用户忽略了系统弹出push,可能使用户产生疑惑,认为应用出现问题,影响用户体验

适配方案:

MIUI提供两项属性值以供业务查询当前隐私模式的开启状态,便于在用户开启隐身模式时弹出“因开启隐身模式故无法使用麦克风相机获取定位”解释文案的弹窗

判断隐身模式为开启状态的属性值:

1. public static final String KEY_INVISIBLE_MODE_STATE = “key_invisible_mode_state”;

Settings.Secure.getInt(getContentResolver(), PermTipsUtils.KEY_INVISIBLE_MODE_STATE, 0) == 1;

2. public static final String KEY_INVISIBLE_MODE_PROP = “persist.sys.invisible_mode”;

SystemPropertiesUtils.get(PermTipsUtils.KEY_INVISIBLE_MODE_PROP) 是 “1”

3.功能体验说明:

若想体验该功能,机型和版本要求如下:

机型:小米10、小米9、红米Redmi K40游戏增强版、红米Redmi K30至尊纪念版、红米Redmi 9、MIX FOLD

MIUI版本:21.6.5之后的开发版rom 

APP开发录音功能 stop 停止播放

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

stop 停止播放

jsBridge.audioRecorder.stop(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stop(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stop(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音 stopRecord 停止录音

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

stopRecord 停止录音

jsBridge.audioRecorder.stopRecord(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

/**
data 返回实际录音时长
  {
    duration //数字类型,实际录音时长
  }
**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stopRecord(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

/**
data 返回实际录音时长
  {
    duration //数字类型,实际录音时长
  }
**/

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.stopRecord(function(succ, data) {
  alert(succ + "\n" + JSON.stringify(data));
});

/**
data 返回实际录音时长
  {
    duration //数字类型,实际录音时长
  }
**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP开发录音功能 startRecord 开始录音 – voice

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

startRecord 开始录音 – voice

jsBridge.audioRecorder.startRecord({
  maxDuration: 60,
  hiddenUI   : false,
  source     : "voice"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.startRecord({
  maxDuration: 60,
  hiddenUI   : false,
  source     : "voice"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});
}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.startRecord({
  maxDuration: 60,
  hiddenUI   : false,
  source     : "voice"
}, function(succ, data) {
  if (!succ) {
    alert(JSON.stringify(data));
  }
});

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

APP录音开发 setListener 设置监听器

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

• 如需接口调用事件,请设置此监听器;

• 回调参数 event及data 请详见具体接口注释;

jsBridge.audioRecorder.setListener(function(event, data) {
  show({
    event: event,
    data : data
  });
});


//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

/**
回调参数说明:
event - 事件代码,数字类型
data  - 事件数据,JSON 对象

event编号及data数据结构 请详见具体接口注释

**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.setListener(function(event, data) {
  show({
    event: event,
    data : data
  });
});


//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

/**
回调参数说明:
event - 事件代码,数字类型
data  - 事件数据,JSON 对象

event编号及data数据结构 请详见具体接口注释

**/

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.audioRecorder.setListener(function(event, data) {
  show({
    event: event,
    data : data
  });
});


//请拉到页面底部查看回调数据信息
$('html,body').animate({ scrollTop: $('#view').offset().top }, 500);

/**
回调参数说明:
event - 事件代码,数字类型
data  - 事件数据,JSON 对象

event编号及data数据结构 请详见具体接口注释

**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->