uni-app 自定义PandoraEntryActivity后,有没有相关方法能在当前activity下通知uni-app层

发布于 1周前 作者 caililin 来自 uni-app

uni-app 自定义PandoraEntryActivity后,有没有相关方法能在当前activity下通知uni-app层
我自定义了一个 PandoraEntryActivity 继承 io.dcloud.PandoraEntryActivity

public class PandoraEntryActivity extends io.dcloud.PandoraEntryActivity {  

  @SuppressLint("RestrictedApi")  
  @Override  
  public boolean dispatchKeyEvent(KeyEvent event) {  
    System.out.println(event.toString());  
    return super.dispatchKeyEvent(event);  
  }  
}

但是我如何在上述代码中将数据通信给uniapp。


5 回复

你是怎么自定义PandoraEntryActivity的?


离线打包就可以了,下载离线包,新增Activity然后继承io.dcloud.PandoraEntryActivity,然后AndroidManifest.xml修改一下主Activity就行了

问题变相解决,最后用的是自己创建一个广播 Intent intent = new Intent(“xxxx”);
intent.putExtra(“type”, “xxxxxx”);
intent.putExtra(“data”, xxxx);
sendBroadcast(intent); 然后uniapp接收 main = plus.android.runtimeMainActivity();
var IntentFilter = plus.android.importClass(‘xxxx’);
filter = new IntentFilter();
filter.addAction(“xxxxx”)
receiver = plus.android.implements(‘io.dcloud.feature.internal.reflect.BroadcastReceiver’, {
onReceive: function (context, intent) {
plus.android.importClass(intent);
//下面的getStringExtra内改为自己的广播标签–有误
let type = intent.getStringExtra(“type”);
let data = intent.getStringExtra(“data”);
//xxx业务代码
}
});
main.registerReceiver(receiver, filter);

为何我重写PandoraEntryActivity后,界面进不去了,是少了什么吗

uni-app 中自定义 PandoraEntryActivity 后,如果你需要在当前 Activity 下通知 uni-app 层,通常可以通过 UniAppJsBridge 来实现与前端 JavaScript 代码的通信。下面是一个示例,展示了如何在自定义的 PandoraEntryActivity 中通知 uni-app 层。

首先,确保你的 PandoraEntryActivity 继承自 io.dcloud.feature.uniapp.common.UniActivity 或其他适当的基类。然后,你可以使用 UniJSCallback 来实现通信。

1. 自定义 PandoraEntryActivity

package com.yourpackage;

import android.os.Bundle;
import io.dcloud.feature.uniapp.common.UniActivity;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.bridge.UniJsBridge;

public class PandoraEntryActivity extends UniActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // Your custom initialization code here
        
        // Notify uni-app layer
        notifyUniAppLayer();
    }

    private void notifyUniAppLayer() {
        UniJsBridge jsBridge = getUniJsBridge();
        if (jsBridge != null) {
            String message = "{\"event\":\"customEvent\",\"data\":\"Hello from PandoraEntryActivity\"}";
            UniJSCallback callback = new UniJSCallback() {
                @Override
                public void invoke(Object data) {
                    // Handle response if needed
                }
            };
            jsBridge.evalJS("uni.postMessage(" + message + ")", callback);
        }
    }
}

2. 在 uni-app 中接收消息

uni-app 的前端代码中,你可以通过监听 message 事件来接收来自原生层的消息。

// 在页面的 onLoad 或其他适当位置添加事件监听
export default {
    onLoad() {
        // 监听来自原生层的消息
        uni.$on('message', (event) => {
            if (event.data && event.data.event === 'customEvent') {
                console.log('Received message from native:', event.data.data);
                // 在这里处理接收到的消息
            }
        });
    }
}

注意事项

  1. 线程安全:确保在正确的线程中调用 evalJS 方法。如果需要在非 UI 线程中调用,可以使用 runOnUiThread
  2. 数据格式:确保传递的数据格式是前端可以解析的,通常使用 JSON 格式。
  3. 权限和安全性:根据实际需求处理消息的传递和接收,确保数据的安全性和隐私保护。

通过这种方式,你可以在自定义的 PandoraEntryActivity 中通知 uni-app 层,实现原生与前端之间的通信。

回到顶部