当前位置:   article > 正文

React Native 中动态获取权限_reactnative 获取位置权限 await requestpermission

reactnative 获取位置权限 await requestpermission

对于我们移动端开发,尤其是安卓开发来说,手机权限的动态获取是几乎每个APP必备的。

下面记录一下,在react native 中如何实现。

首先介绍一下,在react native中,对于权限的操作,需要用到一个组件就是PermissionAndroid。

具体实现场景如下:权限的获取,放在首页。在首页进行一次统一的check与request。

  1. //获取所需的权限
  2. requestPermissions = async () => {
  3. try {
  4. const permissions = [
  5. PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
  6. PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
  7. PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
  8. PermissionsAndroid.PERMISSIONS.CAMERA];
  9. const granted = await PermissionsAndroid.requestMultiple(permissions);
  10. // if (granted['android.permission.WRITE_EXTERNAL_STORAGE'] === 'granted') {} else {}
  11. console.log("------>打印返回的权限授权值" + permission + "------>" + granted)
  12. return granted;
  13. } catch (err) {
  14. // this._show(err.toString());
  15. return null;
  16. }
  17. };

到此就完成了统一的权限请求。但是要注意引入相应的包

import {  PermissionsAndroid } from 'react-native';

那么对于单一的权限的检查与再次申请还有用户授权后的相对应的处理要如何去做,代码如下:

  1. componentDidMount() {
  2. this.checkPermissionCarmera();
  3. this.checkPermissionRead();
  4. this.checkPermissionWrite();
  5. this.getDataFromSever();
  6. }
  7. //检查是否获取定位权限
  8. checkPermissionCarmera() {
  9. try {
  10. //返回Promise类型
  11. const granted = PermissionsAndroid.check(
  12. PermissionsAndroid.PERMISSIONS.CAMERA
  13. )
  14. // console.log("此时的granted的值为----"+granted.data)
  15. granted.then((data) => {
  16. // console.log("是否获取定位权限----" + data)
  17. if (data == false) {
  18. // console.log("未获得权限 请求权限----" + data)
  19. this.requestPermissionCarmera();
  20. }
  21. }).catch((err) => {
  22. Toast.info(err.toString())
  23. })
  24. } catch (err) {
  25. Toast.info(err.toString())
  26. }
  27. }
  28. //请求定位权限
  29. requestPermissionCarmera = async () => {
  30. // PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)
  31. try {
  32. //返回string类型
  33. const granted = await PermissionsAndroid.request(
  34. PermissionsAndroid.PERMISSIONS.CAMERA,
  35. {
  36. //第一次请求拒绝后提示用户你为什么要这个权限
  37. 'title': '我要定位权限',
  38. 'message': '没权限我不能工作,同意就好了'
  39. }
  40. )
  41. if (granted === PermissionsAndroid.RESULTS.GRANTED) {
  42. console.log("-----用户已授权")
  43. } else {
  44. Toast.info("请先开启相机权限")
  45. this.backButtonPress();
  46. }
  47. } catch (err) {
  48. console.log("-----出现错误")
  49. }
  50. }
  51. //检查是否获取读取权限
  52. checkPermissionRead() {
  53. try {
  54. //返回Promise类型
  55. const granted = PermissionsAndroid.check(
  56. PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE
  57. )
  58. granted.then((data) => {
  59. if (data == false) {
  60. this.requestPermissionRead();
  61. }
  62. }).catch((err) => {
  63. Toast.info(err.toString())
  64. })
  65. } catch (err) {
  66. Toast.info(err.toString())
  67. }
  68. }
  69. //请求读取权限
  70. requestPermissionRead = async () => {
  71. // PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)
  72. try {
  73. //返回string类型
  74. const granted = await PermissionsAndroid.request(
  75. PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
  76. {
  77. //第一次请求拒绝后提示用户你为什么要这个权限
  78. 'title': '我要读取权限',
  79. 'message': '没权限我不能工作,同意就好了'
  80. }
  81. )
  82. if (granted === PermissionsAndroid.RESULTS.GRANTED) {
  83. console.log("-----用户已授权")
  84. } else {
  85. Toast.info("请先开启读取权限")
  86. this.backButtonPress();
  87. }
  88. } catch (err) {
  89. console.log("-----出现错误")
  90. }
  91. }
  92. //检查是否获取写入权限
  93. checkPermissionWrite() {
  94. try {
  95. //返回Promise类型
  96. const granted = PermissionsAndroid.check(
  97. PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
  98. )
  99. granted.then((data) => {
  100. if (data == false) {
  101. this.requestPermissionWrite();
  102. }
  103. }).catch((err) => {
  104. Toast.info(err.toString())
  105. })
  106. } catch (err) {
  107. Toast.info(err.toString())
  108. }
  109. }
  110. //请求写入权限
  111. requestPermissionWrite = async () => {
  112. // PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)
  113. try {
  114. //返回string类型
  115. const granted = await PermissionsAndroid.request(
  116. PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
  117. {
  118. //第一次请求拒绝后提示用户你为什么要这个权限
  119. 'title': '我要写入权限',
  120. 'message': '没权限我不能工作,同意就好了'
  121. }
  122. )
  123. if (granted === PermissionsAndroid.RESULTS.GRANTED) {
  124. console.log("-----用户已授权")
  125. } else {
  126. Toast.info("请先开启写入权限")
  127. this.backButtonPress();
  128. }
  129. } catch (err) {
  130. console.log("-----出现错误")
  131. }
  132. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/283801
推荐阅读
相关标签
  

闽ICP备14008679号