9***@qq.com
9***@qq.com
  • 发布:2019-01-20 18:10
  • 更新:2024-09-20 08:48
  • 阅读:17123

h5+安卓判断通知权限,打开通知权限

分类:uni-app

以下是uniapp代码
1、安卓代码

var main = plus.android.runtimeMainActivity();  
var pkName = main.getPackageName();  
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");  
var packageNames = NotificationManagerCompat.from(main);  
console.log(JSON.stringify(packageNames));  
if (packageNames.areNotificationsEnabled()) {  
    console.log('已开启通知权限');  
}else{  
    uni.showModal({  
        title: '提示',  
        content: '请先打开APP通知权限',  
        showCancel: false,  
        success: function (res) {  
            if (res.confirm) {  
                var Intent = plus.android.importClass('android.content.Intent');  
                var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');//可设置表中所有Action字段  
                intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);  
                main.startActivity(intent);  
            }  
        }  
    });  
}

2、苹果代码

var UIApplication = plus.ios.import("UIApplication");  
var app = UIApplication.sharedApplication();  
var enabledTypes  = 0;  
if (app.currentUserNotificationSettings) {  
    var settings = app.currentUserNotificationSettings();  
    enabledTypes = settings.plusGetAttribute("types");  
} else {  
    //针对低版本ios系统  
    enabledTypes = app.enabledRemoteNotificationTypes();  
}  
plus.ios.deleteObject(app);  
if ( 0 == enabledTypes ) {  
    uni.showModal({  
        title: '提示',  
        content: '请先打开APP通知权限',  
        showCancel: false,  
        success: function (res) {  
            if (res.confirm) {  
                var UIApplication = plus.ios.import("UIApplication");  
                var NSURL = plus.ios.import("NSURL");  
                var setting = NSURL.URLWithString("app-settings:");  
                var application = UIApplication.sharedApplication();  
                application.openURL(setting);  
                plus.ios.deleteObject(setting);  
                plus.ios.deleteObject(application);  
            }  
        }  
    });  
}  
9 关注 分享
SimpleJalon mengxinxuexi chenguokai 1***@qq.com 3***@qq.com 3***@qq.com 3***@qq.com 粉末的沉淀 六七四十二

要回复文章请先登录注册

南黎2024

南黎2024

引入了通知权限后
uses-permission android:name=\"android.permission.POST_NOTIFICATIONS
开启权限是正常的 但是如果关闭了权限回到app,app就会刷新一下 这个是安卓sdk33的特性吗? 我在安卓12没有遇到过这种情况
而且一定要配置push 否则会弹窗提示push没有配置的警告 
如果我不想用用unipush就不行吗?配置了上面这个权限默认就给我带上了push了 如何配置取消呢?
2024-09-20 08:48
8***@qq.com

8***@qq.com

离线打包在Xcode运行提示未添加native.js模块
2021-11-23 18:59
1***@qq.com

1***@qq.com

回复 LRL啊 :
感谢,找了两天了
2021-11-16 15:15
LRL啊

LRL啊

回复 蓝眸 :
这个uni.customModal.showModal是我自定义的一个确认弹框,你这边自己修改一下。commit('setNotificationState', true)这个是我状态管理设置通知权限状态的
2021-11-08 11:55
蓝眸

蓝眸

回复 LRL啊 :
感谢
2021-11-08 11:09
LRL啊

LRL啊

回复 蓝眸 :
```
var main = plus.android.runtimeMainActivity();
var NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
let pkName = main.getPackageName();
let packageNames = NotificationManagerCompat.from(main);
console.log('通知权限', packageNames.areNotificationsEnabled())
if (!packageNames.areNotificationsEnabled()) { //手机没有开启通知的权限
commit('setNotificationState', false)
// console.log("没有通知权限");

uni.customModal.showModal({
title: "提示",
content: `想要获取最新消息,请打开通知权限!若要通知更加个性化可开启锁屏与横幅通知!`,
cancelText: '取消',
confirmText: '去设置',
showCancel: true, // 是否显示取消按钮,默认为 true
}).then(() => {
let uid = main.getApplicationInfo().plusGetAttribute("uid");
let Intent = plus.android.importClass('android.content.Intent');
let Build = plus.android.importClass("android.os.Build");
let intent = '';
//android 8.0引导
if (Build.VERSION.SDK_INT >= 26) {
intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
} else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0
intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra("app_package", pkName);
intent.putExtra("app_uid", uid);
} else { //(<21)其他--跳转到该应用管理的详情页
let Settings = plus.android.importClass("android.provider.Settings");
let Uri = plus.android.importClass("android.net.Uri");
intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
let uri = Uri.fromParts("package", main.getPackageName(), null);
intent.setData(uri);
}
// 跳转到该应用的系统通知设置页
main.startActivity(intent);
}).catch(() => {})
}else{
commit('setNotificationState', true)
}
```
2021-11-08 10:32
蓝眸

蓝眸

回复 LRL啊 :
老哥,我这儿也报错了,能贴一下你的完整代码么
2021-11-04 20:42
LRL啊

LRL啊

回复 Hi校园 :
用的另一种方式获取的
```javascript
var main = plus.android.runtimeMainActivity();
var NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
let pkName = main.getPackageName();
```
2021-09-30 09:57
Hi校园

Hi校园

hbuilder 3.2.6 alpha
2021-09-08 10:19
Hi校园

Hi校园

回复 LRL啊 :
我这边也报错
2021-09-08 10:18