uni-app android平台设定通知组及自定义音频
uni-app android平台设定通知组及自定义音频
代码示例
JavaScript 代码
// 写入通知组
export const writenotificationsgroup = () => {
const context = UTSAndroid.getAppContext() as Context
const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
// 创建通知渠道,适用于 Android 8.0+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
const audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build();
const mUri : Uri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.sund);
console.log(mUri);
const channelId = "Clcok_Service"
const channelName = "闹钟提醒"
let channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH);
channel.enableVibration(true);
channel.enableLights(true);
channel.lightColor = Color.BLUE
channel.setDescription("用于无网络下的闹钟提醒")
// channel.setSound(mUri, audioAttributes);
notificationManager.createNotificationChannel(channel)
Log.d("Notification", "通知渠道已创建")
}
}
日志信息
信息 | 描述 |
---|---|
问题描述 | 目前震动和提醒说正常的 但是拿不到音频文件地址打印出开是空的 这个代码在原生上面是ok的 我也重新打了自定义基座 |
1 回复
在uni-app中,为Android平台设定通知组及自定义音频,你需要使用原生插件或者通过manifest.json
和一些JavaScript代码来实现。以下是一个基于uni-app和原生Android代码结合实现的示例。
步骤 1: 配置 manifest.json
首先,在manifest.json
中添加必要的权限配置,以便应用能够发送通知和访问外部存储(如果你的音频文件存储在外部存储中)。
"mp-weixin": {},
"app-plus": {
"distribute": {
"android": {
"permissions": [
"android.permission.NOTIFY_PRIVILEGED",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"
]
}
}
}
步骤 2: 创建原生插件(或修改现有插件)
由于uni-app本身不直接支持通知组的设定和自定义音频,你需要编写一个Android原生插件。这里假设你已经熟悉如何创建uni-app原生插件。
Android原生代码示例
在插件的Android项目中,创建一个类来处理通知:
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.media.RingtoneManager;
import android.net.Uri;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
public class NotificationHelper {
public static void createNotificationChannel(Context context, String channelId, String channelName, String soundUri) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Uri sound = Uri.parse(soundUri); // 你的自定义音频URI
NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(sound, null);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.createNotificationChannel(channel);
}
}
public static void sendNotification(Context context, String channelId, String title, String body) {
Notification.Builder builder = new Notification.Builder(context, channelId)
.setContentTitle(title)
.setContentText(body);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, builder.build());
}
}
步骤 3: 在uni-app中调用原生插件
在uni-app的JavaScript代码中,通过plus.bridge.exec
调用你的原生插件方法:
plus.bridge.exec('YourPluginName', 'createNotificationChannel', [
'your_channel_id',
'Your Channel Name',
'android.resource://your.package.name/' + R.raw.your_audio_file // 自定义音频资源路径
], function(e) {
console.log('Notification channel created:', e);
});
plus.bridge.exec('YourPluginName', 'sendNotification', [
'your_channel_id',
'Notification Title',
'Notification Body'
], function(e) {
console.log('Notification sent:', e);
});
注意:上述代码中的资源路径和插件名称需要根据你的实际项目进行调整。这个示例展示了如何在Android平台上通过uni-app结合原生代码设定通知组及自定义音频。