Android动态权限设置

本文介绍了一个项目中如何通过动态权限管理实现相机、通讯录等功能。包括在manifest文件中配置targetSdkVersion,以及使用JS代码检查并请求所需权限的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中加入res/manifest.xml文件

注:为保证动态权限尽可能适配更多厂商的手机以及顺利上线Google Play,targetSdkVersion目前推荐设置为26.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <application name="targetSdkVersion" value="26"/>
</manifest>

 

html代码:其中参数和apicloud文档里面的一致

<button onclick="opWithPermission('camera')">
    扫一扫
</button>
<button onclick="opWithPermission('contacts')">
    通讯录
</button>
<button onclick="opWithPermission('location')">
    定位
</button>
<button onclick="opWithPermission('microphone')">
     录音
</button>

js代码:

//封装提示
function apialert(_msg, callback){
	api.alert({
	    title: '提示',
	    msg: _msg,
	}, function(ret, err) {
		if(callback){
			callback();
		}
	});
}
function hasPermission(one_per){
       var perms = new Array();
       if(one_per){
           perms.push(one_per);
       }else{
           var prs = document.getElementsByName("p_list");
           for(var i = 0; i < prs.length; i++){
               if(prs[i].checked){
                   perms.push(prs[i].value);
               }
           }
       }
       var rets = api.hasPermission({
           list:perms
       });
       if(!one_per){
        //    apialert('判断结果:' + JSON.stringify(rets));
           return;
       }
       return rets;
   }
//点击操作
function opWithPermission(perm){
      if(!confirmPer(perm)){
          return;
      }
      if('calendar' == perm){
          //操作日历
      }else if('camera' == perm){
          api.getPicture({
              sourceType: 'camera',
              mediaValue: 'pic',
              destinationType: 'url',
          }, function(ret, err) {
            //   if (ret) {
            //       apialert(JSON.stringify(ret));
            //   } else {
            //       apialert(JSON.stringify(err));
            //   }
          });
      }else if('contacts' == perm){
          api.openContacts({
              test: true
          }, function(ret, err) {
            //   if (ret && ret.status) {
            //       apialert(JSON.stringify(ret));
            //   } else {
            //       apialert(JSON.stringify(err));
            //   }
          });
      }else if('location' == perm){
          api.getLocation(function(ret, err) {
              if (ret && ret.status) {
                  apialert(JSON.stringify(ret));
              } else {
                  apialert(JSON.stringify(err));
              }
          });
      }else if('microphone' == perm){
          api.startRecord({
              path: 'fs://perm-test.amr'
          });
      }else if('phone' == perm){
          api.call({
              type: 'tel',
              number: '10086'
          });
      }else if('sensor' == perm){
          //操作身体传感器
      }else if('sms' == perm){
          api.sms({
              numbers: ['10086'],
              text: '余额',
              silent: true
          });
      }else if('storage' == perm){
          api.readFile({
              path:'fs://test.txt'
          }, function(ret, err) {
              if (ret.status) {
                  console.log('readFile: ' + ret.data);
              } else {
                  apialert(err.msg + ": \n" + api.fsDir);
              }
          });
      }
  }
  function confirmPer(perm){
     var has = hasPermission(perm);
     if(!has || !has[0] || !has[0].granted){
         api.confirm({
             title: '提醒',
             msg: '没有获得 ' + perm + " 权限\n是否前往设置?",
             buttons: ['去设置', '取消']
         }, function(ret, err) {
             if(1 == ret.buttonIndex){
                 reqPermission(perm);
             }
         });
         return false;
     }
     return true;
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值