HarmonyOS 鸿蒙Next 跨进程通信的onAbilityConnectDone回调不执行

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 跨进程通信的onAbilityConnectDone回调不执行

public class Sender {
    private static final String TAG = "Sender";
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Sender");
    public static final Sender INSTANCE = new Sender();
    public static Context app = null;
    private IRemoteServer server = null;
    private final IAbilityConnection connection = new IAbilityConnection() {
        @Override
        public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int i) {
            server = RemoteServerStub.asInterface(iRemoteObject);
            new ToastDialog(app).setText("onAbilityConnectDone " + server).show();
            Log.e(TAG, "onAbilityConnectDone server=" + server);
        }
        @Override
        public void onAbilityDisconnectDone(ElementName elementName, int i) {
            Log.e(TAG, "onAbilityDisconnectDone");
        }
    };
    private Sender(){}
    public void connect(Ability ability) {
        Intent it = new Intent();
        Operation operation = new Intent.OperationBuilder()
                .withDeviceId("")
                .withBundleName("com.finogeeks.hidl")
                .withAbilityName("com.finogeeks.hidl.RemoteServiceAbility")
                .build();
        it.setOperation(operation);
        ability.connectAbility(it, connection);
    }
    public IRemoteServer server() {
        return server;
    }
}

public class RemoteServiceAbility extends Ability {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "RemoteServiceAbility");
    private final RemoteServer server = new RemoteServer(this, "RemoteServer");
    @Override
    public void onStart(Intent intent) {
        new ToastDialog(this).setText("onStart").show();
        HiLog.error(LABEL_LOG, "RemoteServiceAbility::onStart");
        super.onStart(intent);
    }
    @Override
    public void onBackground() {
        super.onBackground();
        HiLog.info(LABEL_LOG, "RemoteServiceAbility::onBackground");
    }
    @Override
    public void onStop() {
        super.onStop();
        HiLog.info(LABEL_LOG, "RemoteServiceAbility::onStop");
    }
    @Override
    public void onCommand(Intent intent, boolean restart, int startId) {}
    @Override
    public IRemoteObject onConnect(Intent intent) {
        new ToastDialog(this).setText("onConnect").show();
        return server;
    }
    @Override
    public void onDisconnect(Intent intent) {}
}

通过toast可以看出,RemoteServiceAbilityonConnect方法执行了,但是IAbilityConnection#onAbilityConnectDone方法却没有执行,这是什么原因?


更多关于HarmonyOS 鸿蒙Next 跨进程通信的onAbilityConnectDone回调不执行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

楼主您好,可以参考下方文档试试:

https://developer.huawei.com/consumer/cn/forum/topic/0202578737701770050?fid=0101587866109860105

如果还是不能解决您的问题,请提供具体DevEco Studio版本、SDK版本,和日志,方便我们具体定位分析。

更多关于HarmonyOS 鸿蒙Next 跨进程通信的onAbilityConnectDone回调不执行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


欢迎开发小伙伴们进来帮帮楼主

针对HarmonyOS鸿蒙Next版本中跨进程通信(IPC)的onAbilityConnectDone回调不执行的问题,可能的原因及解决方案如下:

  1. 检查连接请求是否发送成功: 确保在发起方已经正确调用了连接远程Ability的API,并且参数(如远程Ability的URI)无误。

  2. 检查远程Ability是否已注册并导出: 远程Ability需要在其配置文件(如config.json)中正确注册,并且确保已经通过@Export注解或其他方式导出,以便外部可以访问。

  3. 检查权限设置: 确保发起连接的进程拥有访问远程Ability所需的权限。权限不足可能导致连接请求被拒绝。

  4. 检查回调方法实现: onAbilityConnectDone回调方法需要在接收方正确实现,并且确保没有抛出异常,否则可能导致回调无法正常执行。

  5. 检查系统日志: 查看系统日志,查找与IPC连接相关的错误信息或警告,这些信息可以提供问题的更多线索。

  6. 版本兼容性: 确保发起连接和接收连接的鸿蒙系统版本兼容,不同版本间可能存在IPC机制上的差异。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部