当前位置:   article > 正文

uniapp获取手机通知权限_uniapp获取通知权限

uniapp获取通知权限

之前发了一篇使用插件市场获取权限的文章,但是有兄弟想要一个单独开启通知权限的教程,这篇文章特意整理一下获取通知权限跳转开启的方法

首先我是设置了一个弹窗通知,具体样式就不在这里写了,可以自行写一个,我在这里就写一下具体获取以及跳转的代码

  1. //首先我们需要一个触发,我是在进入页面onReady()生命周期中触发的检测
  2. getQuanxian() {
  3. let platform = uni.getSystemInfoSync().platform; //首先判断app是安卓还是ios
  4. console.log(platform);
  5. if (platform == "ios") { //这里是ios的方法
  6. console.log("我是iOS");
  7. var UIApplication = plus.ios.import("UIApplication");
  8. var app = UIApplication.sharedApplication();
  9. var enabledTypes = 0;
  10. if (app.currentUserNotificationSettings) {
  11. var settings = app.currentUserNotificationSettings();
  12. enabledTypes = settings.plusGetAttribute("types");
  13. console.log("enabledTypes1:" + enabledTypes);
  14. if (enabledTypes == 0) { //如果enabledTypes = 0 就是通知权限没有开启
  15. this.tongzhi = true; //这里是我写的一个弹窗上面有一个跳转开启的按钮,自行添加即可
  16. }
  17. }
  18. plus.ios.deleteObject(settings);
  19. } else if (platform == "android") { //下面是安卓的方法
  20. console.log("我是安卓", plus.android);
  21. var main = plus.android.runtimeMainActivity();
  22. var pkName = main.getPackageName();
  23. var uid = main.getApplicationInfo().plusGetAttribute("uid");
  24. var NotificationManagerCompat = plus.android.importClass(
  25. "android.support.v4.app.NotificationManagerCompat"
  26. );
  27. //android.support.v4升级为androidx
  28. if (NotificationManagerCompat == null) {
  29. NotificationManagerCompat = plus.android.importClass(
  30. "androidx.core.app.NotificationManagerCompat"
  31. );
  32. }
  33. var areNotificationsEnabled =
  34. NotificationManagerCompat.from(main).areNotificationsEnabled();
  35. // 未开通‘允许通知’权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置
  36. if (!areNotificationsEnabled) {
  37. this.tongzhi = true; //这里也一样未开启权限,弹出弹窗
  38. }
  39. }
  40. },

上面是根据手机操作系统来检测系统是否开启通知权限,下面代码是在检测没有开启通知权限后弹窗提示,然后点击弹窗按钮后到设置对应权限的页面跳转方法,

Tips:安卓手机由于系统新老版本不一样,开启权限的位置可能有所不同,需要根据实际情况来进行修改,ios由于权限问题有可能会跳转失败,需要手动开启

  1. //开启通知
  2. openTongZhi() { //弹窗按钮绑定方法
  3. let platform = uni.getSystemInfoSync().platform; //获取安卓还是ios
  4. this.tongzhi = false;
  5. if (platform == "ios") {//如果机型是ios,ios由于权限问题,可能需要手动开启
  6. var UIApplication = plus.ios.import("UIApplication");
  7. var app = UIApplication.sharedApplication();
  8. var settings = app.currentUserNotificationSettings();
  9. enabledTypes = settings.plusGetAttribute("types");
  10. var NSURL2 = plus.ios.import("NSURL");
  11. var setting2 = NSURL2.URLWithString("app-settings:");
  12. var application2 = UIApplication.sharedApplication();
  13. application2.openURL(setting2);
  14. plus.ios.deleteObject(setting2);
  15. plus.ios.deleteObject(NSURL2);
  16. plus.ios.deleteObject(application2);
  17. plus.ios.deleteObject(settings);
  18. } else if (platform == "android") {//如果机型是安卓
  19. var main = plus.android.runtimeMainActivity();
  20. var pkName = main.getPackageName();
  21. var uid = main.getApplicationInfo().plusGetAttribute("uid");
  22. var Intent = plus.android.importClass("android.content.Intent");
  23. var Build = plus.android.importClass("android.os.Build");
  24. //android 8.0引导
  25. if (Build.VERSION.SDK_INT >= 26) { //判断安卓系统版本
  26. var intent = new Intent("android.settings.APP_NOTIFICATION_SETTINGS");
  27. intent.putExtra("android.provider.extra.APP_PACKAGE", pkName);
  28. } else if (Build.VERSION.SDK_INT >= 21) { //判断安卓系统版本
  29. //android 5.0-7.0
  30. var intent = new Intent("android.settings.APP_NOTIFICATION_SETTINGS");
  31. intent.putExtra("app_package", pkName);
  32. intent.putExtra("app_uid", uid);
  33. } else {
  34. //(<21)其他--跳转到该应用管理的详情页
  35. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  36. var uri = Uri.fromParts(
  37. "package",
  38. mainActivity.getPackageName(),
  39. null
  40. );
  41. intent.setData(uri);
  42. }
  43. // 跳转到该应用的系统通知设置页
  44. main.startActivity(intent);
  45. }
  46. },

以上就是在uniapp中开启通知权限的方法了,如果有需要,大家可自行挪用,如有写的不清楚的地方还请指出

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

闽ICP备14008679号