uni-app中app定时器广播无法接收 BroadcastReceiver

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

uni-app中app定时器广播无法接收 BroadcastReceiver

@Suppress("DEPRECATION")  
class AlarmReceiver extends BroadcastReceiver {  
    constructor (){  
        super();  
    }  
    override onReceive(context : Context, intent : Intent) {  
        var action = intent.getAction();  
            Log.d("AlarmReceiver", "Broadcast received: " + action);   
        console.log('ygskyl');  
        if (action.equals("ACTION_FROM_NATIVE")) {  
            var value = intent.getStringExtra("msg");  
            console.log("yhh",value);  
        }  
    }  
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="io.dcloud.uni_modules.qtClock">
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SET_ALARM" />
<application>
<receiver android:name="uts.sdk.modules.qtClock.AlarmReceiver">
<intent-filter>
<action android:name="uts.sdk.modules.qtClock.ACTION_FROM_NATIVE" />
</intent-filter>
</receiver>
</application>
</manifest>

根据安卓的 logcat 显示 提交是ok的 但是就是无法创建静态监听


1 回复

在uni-app中,如果你遇到了app定时器广播无法接收BroadcastReceiver的问题,通常这可能是由于Android原生开发与uni-app框架之间的集成问题。uni-app主要基于Vue.js开发,它本身不直接处理Android的原生组件如BroadcastReceiver。不过,你可以通过集成原生插件的方式来实现这一功能。

以下是一个基本的示例,展示了如何在uni-app中集成一个Android原生插件来接收定时器广播。

步骤 1: 创建Android原生插件

  1. 创建插件项目: 使用Android Studio创建一个新的Android库项目。

  2. 定义BroadcastReceiver

    package com.example.broadcastreceiver;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    
    public class TimerBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if ("com.example.TIMER_ACTION".equals(action)) {
                Log.d("TimerBroadcastReceiver", "Received timer broadcast!");
                // 在这里处理接收到的广播
            }
        }
    }
    
  3. 注册BroadcastReceiver: 在AndroidManifest.xml中注册接收器。

    <receiver android:name=".TimerBroadcastReceiver">
        <intent-filter>
            <action android:name="com.example.TIMER_ACTION" />
        </intent-filter>
    </receiver>
    

步骤 2: 集成插件到uni-app

  1. 打包插件: 将Android库项目打包成AAR文件。

  2. 在uni-app中集成AAR: 将AAR文件放入uni-app项目的nativeplugins目录下,并在manifest.json中配置插件。

  3. 在JavaScript中调用: 由于uni-app本身不直接处理Android的广播,你需要通过插件的接口来发送和接收广播。这里假设你已经通过插件接口发送了广播,现在需要接收它(注意,实际接收广播的逻辑在Android原生代码中完成,JavaScript层面通常只负责触发和配置)。

注意

  • uni-app本身不直接支持广播的接收,所有与Android原生相关的功能都需要通过原生插件来实现。
  • 确保在AndroidManifest.xml中正确注册了BroadcastReceiver
  • 在JavaScript层面,你可能需要设计一种机制(如通过原生插件的回调接口)来通知uni-app应用广播已被接收并处理。

通过上述步骤,你可以在uni-app中实现定时器广播的接收。不过,具体实现可能会根据项目的实际情况有所调整。

回到顶部