HarmonyOS-鸿蒙app开发 —基于java_华为分享接入_服务接入华为分享开发指导

HarmonyOS-鸿蒙app开发 —基于java_华为分享接入_服务接入华为分享开发指导

服务接入华为分享开发步骤(HarmonyOS侧)

集成IDL接口,用于建立分享方与华为分享的交互通道,完成后续服务分享过程。

在“java”目录同级目录创建“idl”接口目录(可手动添加或通过DevEco Studio创建):com/huawei/hwshare/third(固定路径),然后创建名为IHwShareCallback.idl和IHwShareService.idl的IDL文件。

IHwShareCallback.idl :

interface com.huawei.hwshare.third.IHwShareCallback {

[oneway] void notifyState([in] int state);

}

 

IHwShareService.idl :

sequenceable ohos.interwork.utils.PacMapEx;

interface com.huawei.hwshare.third.IHwShareCallback;

 

interface com.huawei.hwshare.third.IHwShareService {

int startAuth([in] String appId, [in] IHwShareCallback callback);

int shareFaInfo([in] PacMapEx pacMapEx);

}

创建ShareFaManager类,用于管理分享方与华为分享的连接通道和数据交互。

说明

在实现服务分享时,会涉及在开发者联盟网站创建原子化服务时生成的appid。

import com.huawei.hwshare.third.HwShareCallbackStub;

import com.huawei.hwshare.third.HwShareServiceProxy;

import ohos.aafwk.ability.IAbilityConnection;

import ohos.aafwk.content.Intent;

import ohos.app.Context;

import ohos.bundle.ElementName;

import ohos.eventhandler.EventHandler;

import ohos.eventhandler.EventRunner;

import ohos.interwork.utils.PacMapEx;

import ohos.rpc.IRemoteObject;

import ohos.rpc.RemoteException;

import ohos.hiviewdfx.HiLog;

import ohos.hiviewdfx.HiLogLabel;

 

public class ShareFaManager {

private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD000F00, “ShareFa”);

 

private static final String LOG_FORMAT = “%{public}s: %{public}s”;

 

public static final String HM_FA_ICON = “ohos_fa_icon”;

 

public static final String HM_FA_NAME = “ohos_fa_name”;

 

public static final String HM_ABILITY_NAME = “ohos_ability_name”;

 

public static final String HM_BUNDLE_NAME = “ohos_bundle_name”;

 

public static final String SHARING_FA_TYPE = “sharing_fa_type”;

 

public static final String SHARING_THUMB_DATA = “sharing_fa_thumb_data”;

 

public static final String SHARING_CONTENT_INFO = “sharing_fa_content_info”;

 

public static final String SHARING_EXTRA_INFO = “sharing_fa_extra_info”;

 

private static final String TAG = “ShareHmFaManager”;

 

private static final String SHARE_PKG_NAME = “com.huawei.android.instantshare”;

 

private static final String SHARE_ACTION = “com.huawei.instantshare.action.THIRD_SHARE”;

 

private static final long UNBIND_TIME = 20*1000L;

 

private Context mContext;

 

private String mAppId;

 

private PacMapEx mSharePacMap;

 

private static ShareFaManager sSingleInstance;

 

private HwShareServiceProxy mShareService;

 

private boolean mHasPermission = false;

 

private EventHandler mHandler = new EventHandler(EventRunner.getMainEventRunner());

 

private final IAbilityConnection mConnection = new IAbilityConnection() {

@Override

public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int i) {

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, “onAbilityConnectDone success.”);

mHandler.postTask(()->{

mShareService = new HwShareServiceProxy(iRemoteObject);

try {

mShareService.startAuth(mAppId, mFaCallback);

} catch (RemoteException e) {

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, “startAuth error.”);

}

});

}

 

@Override

public void onAbilityDisconnectDone(ElementName elementName, int i) {

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, “onAbilityDisconnectDone.”);

mHandler.postTask(()->{

mShareService = null;

mHasPermission = false;

});

}

};

 

private Runnable mTask = () -> {

if (mContext != null && mShareService != null) {

mContext.disconnectAbility(mConnection);

mHasPermission = false;

mShareService = null;

}

};

 

private final HwShareCallbackStub mFaCallback = new HwShareCallbackStub(“HwShareCallbackStub”) {

@Override

public void notifyState(int state) throws RemoteException {

mHandler.postTask(()->{

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, “notifyState: “ + state);

if (state == 0) {

mHasPermission = true;

if (mSharePacMap != null) {

shareFaInfo();

}

}

});

}

};

 

/**

* 单例模式获取ShareFaManager的实例对象

*

* @param context 程序Context

* @return ShareFaManager实例对象

*/

public static synchronized ShareFaManager getInstance(Context context) {

if (sSingleInstance == null && context != null) {

sSingleInstance = new ShareFaManager(context.getApplicationContext());

}

return sSingleInstance;

}

 

private ShareFaManager(Context context) {

mContext = context;

}

 

private void shareFaInfo() {

if (mShareService == null) {

return;

}

if (mHasPermission) {

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, “start shareFaInfo.”);

try {

mShareService.shareFaInfo(mSharePacMap);

mSharePacMap = null;

} catch (RemoteException e) {

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, “shareFaInfo error.”);

}

}

// 不使用时断开

mHandler.postTask(mTask, UNBIND_TIME);

}

 

/**

* 用于分享服务

*

* @param appId 开发者联盟网站创建原子化服务时生成的appid

* @param pacMap 服务信息载体

*/

public void shareFaInfo(String appId, PacMapEx pacMap) {

if (mContext == null) {

return;

}

mAppId = appId;

mSharePacMap = pacMap;

mHandler.removeTask(mTask);

shareFaInfo();

bindShareService();

}

 

private void bindShareService() {

if (mShareService != null) {

return;

}

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, “start bindShareService.”);

Intent intent = new Intent();

Operation operation = new Intent.OperationBuilder()

.withDeviceId(“”)

.withBundleName(SHARE_PKG_NAME)

.withAction(SHARE_ACTION)

.withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)

.build();

intent.setOperation(operation);

mContext.connectAbility(intent, mConnection);

}

}

封装服务分享数据,调用ShareFaManager封装的接口完成服务的分享。

常量字段

类型

描述

ShareFaManager.SHARING_FA_TYPE

int

分享的服务类型,当前只支持默认值0,非必选参数。如果不传递此参数,则接收方默认赋值为0。

ShareFaManager.HM_BUNDLE_NAME

String

分享的服务的bundleName,最大长度1024,必选参数。

ShareFaManager.SHARING_EXTRA_INFO

String

携带的额外信息,可传递到被拉起的服务界面 ,最大长度10240,非必选参数。

ShareFaManager.HM_ABILITY_NAME

String

分享的服务的Ability类名,最大长度1024,必选参数。

ShareFaManager.SHARING_CONTENT_INFO

String

卡片展示的服务介绍信息,最大长度1024,必选参数。

ShareFaManager.SHARING_THUMB_DATA

byte[]

卡片展示服务介绍图片,最大长度153600,必选参数。

ShareFaManager.HM_FA_ICON

byte[]

服务图标,如果不传递此参数,取分享方默认服务图标,最大长度32768,非必选参数。

ShareFaManager.HM_FA_NAME

String

卡片展示的服务名称,最大长度1024,非必选参数。如果不传递此参数,取分享方默认服务名称。

PacMapEx pacMap = new PacMapEx();

pacMap.putObjectValue(ShareFaManager.SHARING_FA_TYPE, 0);

pacMap.putObjectValue(ShareFaManager.HM_BUNDLE_NAME, getBundleName());

pacMap.putObjectValue(ShareFaManager.SHARING_EXTRA_INFO, “xxxxxxxx”);

pacMap.putObjectValue(ShareFaManager.HM_ABILITY_NAME, XxxAbility.class.getName());

pacMap.putObjectValue(ShareFaManager.SHARING_CONTENT_INFO, “xxxxxxx”);

pacMap.putObjectValue(ShareFaManager.SHARING_THUMB_DATA, picByte);

pacMap.putObjectValue(ShareFaManager.HM_FA_ICON, iconByte);

pacMap.putObjectValue(ShareFaManager.HM_FA_NAME, “FAShareDemo”);

// 第一个参数为appid,在华为AGC创建原子化服务时自动生成。

ShareFaManager.getInstance(MainAbilitySlice.this).shareFaInfo(“xxxxxxxxxx”, pacMap);

编译HAP包后进行调试。

准备两台HarmonyOS手机,且其系统软件版本不低于HarmonyOS 2.0。

配置真机调试(具体配置方式请参见真机调试指导),参考用户业务流程进行调试。

🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com