uniapp 如何调用安卓原生代码创建通知

在uniapp中怎么调用安卓原生的代码来创建通知?需要在uniapp里实现安卓原生的通知功能,但是不知道具体该怎么操作。有没有详细的步骤或者示例代码可以参考?

2 回复

在uniapp中,可通过uni.requireNativePlugin调用原生插件,或使用plus.android.importClass导入安卓类,然后调用NotificationManager创建通知。


在 UniApp 中调用安卓原生代码创建通知,可以通过 UniApp 原生插件条件编译 + 原生开发 实现。以下是详细步骤:

方法一:使用 UniApp 原生插件

  1. 创建原生插件

    • 在 UniApp 项目根目录的 nativeplugins 文件夹下创建插件目录(如 NotificationPlugin)。
    • 添加 android 文件夹,并在其中编写安卓原生代码。
  2. 编写安卓原生代码
    android 目录下创建 .java 文件,例如 NotificationModule.java

    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.content.Context;
    import android.os.Build;
    import androidx.core.app.NotificationCompat;
    
    public class NotificationModule {
        // 创建通知的方法
        public static void createNotification(Context context, String title, String content) {
            NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            String channelId = "uniapp_channel";
            
            // 适配 Android 8.0 及以上版本的通知渠道
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(channelId, "UniApp Notifications", NotificationManager.IMPORTANCE_DEFAULT);
                manager.createNotificationChannel(channel);
            }
    
            // 构建通知
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId)
                    .setContentTitle(title)
                    .setContentText(content)
                    .setSmallIcon(android.R.drawable.ic_dialog_info); // 替换为应用图标
            
            manager.notify(1, builder.build());
        }
    }
    
  3. 在 UniApp 中调用插件
    通过 uni.requireNativePlugin 调用原生方法:

    // 在 Vue 页面或方法中
    const notificationModule = uni.requireNativePlugin('NotificationModule');
    notificationModule.createNotification("测试标题", "通知内容");
    

方法二:条件编译 + 原生开发

在 UniApp 的 App.vue 或页面中,通过条件编译调用安卓原生代码:

// #ifdef APP-PLUS
const main = plus.android.runtimeMainActivity();
const NotificationManager = plus.android.importClass('android.app.NotificationManager');
const NotificationCompat = plus.android.importClass('androidx.core.app.NotificationCompat');
const NotificationChannel = plus.android.importClass('android.app.NotificationChannel');

// 创建通知
function createNotification(title, content) {
  const manager = main.getSystemService('notification');
  const channelId = 'uniapp_channel';

  if (plus.os.version >= 8) {
    const channel = new NotificationChannel(channelId, 'UniApp Channel', NotificationManager.IMPORTANCE_DEFAULT);
    manager.createNotificationChannel(channel);
  }

  const builder = new NotificationCompat.Builder(main, channelId)
    .setContentTitle(title)
    .setContentText(content)
    .setSmallIcon(android.R.drawable.ic_dialog_info);

  manager.notify(1, builder.build());
}

// 调用示例
createNotification("Hello", "This is a notification from UniApp");
// #endif

注意事项:

  1. 权限配置:在 manifest.jsonAPP-PLUSdistributeandroid 中添加通知权限:
    {
      "permissions": [
        "<uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />"
      ]
    }
    
  2. 图标资源:替换 setSmallIcon 中的资源为应用自有图标。
  3. 安卓版本适配:Android 8.0(API 26)及以上需创建通知渠道。

选择方法一(原生插件)适合复杂功能复用,方法二适合简单快速集成。根据需求选择即可。

回到顶部