uni-app android平台设定通知组及自定义音频

发布于 1周前 作者 phonegap100 来自 Uni-App

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结合原生代码设定通知组及自定义音频。

回到顶部