目录

应用内自定义呼叫

代码结构

模块

文件名

文件用途

CaaSEngineDemo

CaasKitHelper.java

对CaaS Engine接口的封装类。

CaasKitApplication.java

全局的Application。

CaasKitActivity.java

全局Activity布局文件。

Sha256Util.java

加密工具类。

Custom calls Demo

[h2]CaasKitHelper.java

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 *
 */
 
package com.huawei.caaskitdemo.caaskit;
 
import android.content.Context;
import android.util.Log;
 
import com.huawei.caas.caasservice.CustomDisplayInfo;
import com.huawei.caas.caasservice.HwCaasHandler;
import com.huawei.caas.caasservice.HwCaasServiceCallBack;
import com.huawei.caas.caasservice.HwCaasServiceManager;
import com.huawei.caas.caasservice.HwCaasUtils;
import com.huawei.caas.caasservice.HwCallAbilityCallBack;
import com.huawei.caas.caasservice.HwMakeCallCallBack;
import com.huawei.caaskitdemo.CaasKitApplication;
 
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
 
/**
 * CaasKit Helper.
 *
 * @since 2020-3-21
 */
public class CaasKitHelper {
    private static final String TAG = "CaasKitHelper";
 
    private static CaasKitHelper mCaasKitHelper;
 
    private HwCaasServiceManager mHwCaasServiceManager;
 
    private HwCaasHandler mHwCaasHandler;
 
    private Context mContext;
 
    private boolean mIsCaasKitInit;
 
    private CaasKitHelper() {
        mContext = CaasKitApplication.getContext();
    }
 
    public static CaasKitHelper getInstance() {
        if (mCaasKitHelper == null) {
            synchronized (CaasKitHelper.class) {
                if (mCaasKitHelper == null) {
                    mCaasKitHelper = new CaasKitHelper();
                }
            }
        }
        return mCaasKitHelper;
    }
 
    public void caasKitInit(HwCaasServiceCallBack callback) {
        Log.d(TAG, "caasKitInit.");
        if (!mIsCaasKitInit) {
            /** Initialize mHwCaasServiceManager instance. */
            mHwCaasServiceManager = HwCaasServiceManager.init();
            /** Initialize HwCaasHandler instance through handlerType. */
            mHwCaasServiceManager.initHandler(mContext, HwCaasUtils.HIDE_NUMBER_TYPE, callback);
            mIsCaasKitInit = true;
        }
    }
 
    public void setHwCaasHandler(HwCaasHandler handler) {
        Log.d(TAG, "setHwCaasHandler.");
        mHwCaasHandler = handler;
    }
 
    public void queryHiCallAbility(String phoneNumber) {
        Log.d(TAG, "queryHiCallAbility.");
        //需Sha256加密后查询 phoneNumber的格式必须是带国家码的号码例:+861320750xxxx
        String phoneNumberSha256 = Sha256Util.encryptNumber(phoneNumber);
        if (mHwCaasHandler != null) {
            mHwCaasHandler.queryCallAbility(phoneNumberSha256, HwCaasUtils.CallAbilityType.HIDE_NUMBER);
        }
    }
 
    public void setCallAbilityCallBack(HwCallAbilityCallBack callback) {
        Log.d(TAG, "setCallAbilityCallBack.");
        if (mHwCaasHandler != null) {
            mHwCaasHandler.setCallAbilityCallBack(callback);
        }
    }
 
    public void setMakeCallCallBack(HwMakeCallCallBack callback) {
        Log.d(TAG, "setMakeCallCallBack.");
        if (mHwCaasHandler != null) {
            mHwCaasHandler.setMakeCallCallBack(callback);
        }
    }
 
    public int makeCall(String phoneNumber, HwCaasUtils.CallType callType) {
        Log.d(TAG, "makeCall.");
        if (mHwCaasHandler != null) {
            CustomDisplayInfo info = new CustomDisplayInfo
                    //被叫界面显示的主叫应用名 - 被叫界面显示的主叫字段1(例:主叫名称) - 主叫界面显示的字段(例:被叫名称)
                    .Builder("Application","Jane", "Andy")
                    //被叫界面显示的主叫字段2(例:公司职位)
                    .setCallerDisplayInfo2("Company X, CDO")
                    .build();
            //需Sha256加密后呼出 phoneNumber的格式必须是带国家码的号码例:+861320750xxxx
            String phoneNumberSha256 = Sha256Util.encryptNumber(phoneNumber);
            int retCode = mHwCaasHandler.makeCall(phoneNumberSha256, callType, info);
            Log.d(TAG, "makeCall retCode: " + retCode);
            return retCode;
        }
        return -1;
    }
 
    public void caasKitRelease() {
        Log.d(TAG, "caasKitRelease." + mIsCaasKitInit);
        if (mIsCaasKitInit) {
            if (mHwCaasServiceManager != null) {
                /** Source release */
                mHwCaasServiceManager.release();
                mHwCaasServiceManager = null;
            }
            mIsCaasKitInit = false;
        }
    }
}

[h2]CaasKitApplication.java

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 */
 
package com.huawei.caaskitdemo;
 
import android.app.Application;
import android.content.Context;
import android.util.Log;
 
/**
 * Main application.
 *
 * @since 2019-10-21
 */
public class CaasKitApplication extends Application {
    private static final String TAG = "CaasKitApplication";
 
    private static CaasKitApplication sApplication;
 
    @Override
    public void onCreate() {
        Log.i(TAG, "onCreate.");
        super.onCreate();
        setApp(this);
    }
 
    public static CaasKitApplication getInstance() {
        return sApplication;
    }
 
    public static Context getContext() {
        return sApplication.getApplicationContext();
    }
 
    private static synchronized void setApp(CaasKitApplication app) {
        sApplication = app;
    }
}

[h2]CaasKitActivity.java

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 *
 */
 
package com.huawei.caaskitdemo;
 
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
import com.huawei.caas.caasservice.HwCaasHandler;
import com.huawei.caas.caasservice.HwCaasServiceCallBack;
import com.huawei.caas.caasservice.HwCaasUtils;
import com.huawei.caas.caasservice.HwCallAbilityCallBack;
import com.huawei.caas.caasservice.HwMakeCallCallBack;
import com.huawei.caaskitdemo.caaskit.CaasKitHelper;
 
import java.util.regex.Pattern;
 
public class CaasKitActivity extends AppCompatActivity {
    private static final String TAG = "CaasKitActivity";
 
    private static final int PHONE_NOT_SUPPORT_HICALL = 3002;
 
    private static final int SHOW_TOAST = 0;
 
    private static final int SET_ALL_VISIBALE = 1;
 
    private static final int SET_ALL_INVISIBALE = 2;
 
    private static final int SET_AUDIO_VISIBALE = 3;
 
    private static final int SET_AUDIO_INVISIBALE = 4;
 
    private EditText mPhoneNumber;
 
    private Button mStartQuery;
 
    private Button mMakeVideoCall;
 
    private Button mMakeAudioCall;
 
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int index = msg.what;
            switch (index) {
                case SHOW_TOAST:
                    toast("caas not support.");
                    break;
                case SET_ALL_VISIBALE:
                    setVisibility(true, 0);
                    break;
                case SET_ALL_INVISIBALE:
                    setVisibility(false, 0);
                    break;
                case SET_AUDIO_VISIBALE:
                    setVisibility(true, 1);
                    break;
                case SET_AUDIO_INVISIBALE:
                    setVisibility(false, 1);
                    break;
                default:
                    break;
            }
        }
    };
 
    private HwCaasServiceCallBack mCallBack = new HwCaasServiceCallBack() {
        @Override
        public void initSuccess(HwCaasHandler handler) {
            Log.i(TAG, "HwCaasServiceCallBack:initSuccess.");
            /** Callback after successful initialization of HwCaasHandler. */
            CaasKitHelper.getInstance().setHwCaasHandler(handler);
            CaasKitHelper.getInstance().setCallAbilityCallBack(mAbilityCallBack);
            CaasKitHelper.getInstance().setMakeCallCallBack(new HwMakeCallCallBack() {
                @Override
                public void makeCallResult(String number, int retCode) {
                    Log.d(TAG, "number: " + number + " retCode: " + retCode);
                }
            });
        }
 
        @Override
        public void initFail(int retCode) {
            /** Callback if init Handler fail. */
            Log.i(TAG, "HwCaasServiceCallBack:initFail:retCode: " + retCode);
            setVisibility(false, 0);
            toast("HwCaasServiceCallBack initFail");
        }
 
        @Override
        public void releaseSuccess() {
            /** Callback after successful release of mHwCaasServiceManager. */
            Log.i(TAG, "HwCaasServiceCallBack:releaseSuccess");
            CaasKitHelper.getInstance().setHwCaasHandler(null);
        }
    };
 
    private HwCallAbilityCallBack mAbilityCallBack = new HwCallAbilityCallBack() {
        @Override
        public void callAbilityResult(String phoneNumberSha256, int retCode) {
            Log.i(TAG, "HwCallAbilityCallBack:phoneNumberSha256:" + phoneNumberSha256 + " retCode:" + retCode);
            if (retCode == 0) {
                handler.sendMessage(handler.obtainMessage(SET_ALL_VISIBALE));
            } else if (retCode == 1) {
                handler.sendMessage(handler.obtainMessage(SET_AUDIO_VISIBALE));
            } else if (retCode == PHONE_NOT_SUPPORT_HICALL) {
                handler.sendMessage(handler.obtainMessage(SHOW_TOAST));
            }
        }
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_caaskitquickcall);
        initView();
        initData();
        CaasKitHelper.getInstance().caasKitInit(mCallBack);
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause.");
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume.");
    }
 
    private void initView() {
        mPhoneNumber = (EditText) findViewById(R.id.phone_number);
        mStartQuery = (Button) findViewById(R.id.start_query);
        mMakeVideoCall = (Button) findViewById(R.id.make_video_call);
        mMakeAudioCall = (Button) findViewById(R.id.make_audio_call);
    }
 
    private void initData() {
        mPhoneNumber.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }
 
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }
 
            @Override
            public void afterTextChanged(Editable editable) {
                setVisibility(false, 0);
            }
        });
 
        mStartQuery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CaasKitHelper.getInstance().queryHiCallAbility(mPhoneNumber.getText().toString());
            }
        });
 
        mMakeVideoCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                makeCall(HwCaasUtils.CallType.VIDEO_CALL);
            }
        });
 
        mMakeAudioCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                makeCall(HwCaasUtils.CallType.VOICE_CALL);
            }
        });
        setVisibility(false, 0);
    }
 
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy.");
        CaasKitHelper.getInstance().caasKitRelease();
    }
 
    private void makeCall(HwCaasUtils.CallType callType) {
        int retCode = CaasKitHelper.getInstance().makeCall(mPhoneNumber.getText().toString(), callType);
        Log.d(TAG, "makeCall:retCode: " + retCode);
    }
 
    private void setVisibility(boolean visible, int callType) {
        int videoCallState = mMakeVideoCall.getVisibility();
        int audioCallState = mMakeAudioCall.getVisibility();
        if (callType == 0) {
            if (visible && (videoCallState != 0 || audioCallState != 0)) {
                mMakeVideoCall.setVisibility(View.VISIBLE);
                mMakeAudioCall.setVisibility(View.VISIBLE);
            } else if (!visible && (videoCallState == 0 || audioCallState == 0)) {
                mMakeVideoCall.setVisibility(View.INVISIBLE);
                mMakeAudioCall.setVisibility(View.INVISIBLE);
            }
        } else if (callType == 1) {
            if (visible && (audioCallState != 0)) {
                mMakeAudioCall.setVisibility(View.VISIBLE);
            } else if (!visible && (audioCallState == 0)) {
                mMakeAudioCall.setVisibility(View.INVISIBLE);
            }
        }
 
    }
 
    /**
     * show toast
     *
     * @param msg show msg
     */
    private void toast(String msg) {
        if (!TextUtils.isEmpty(msg)) {
            Toast.makeText(CaasKitApplication.getContext(), msg, Toast.LENGTH_SHORT).show();
        }
    }
}

[h2]Sha256Util.java

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
 */
 
package com.huawei.caaskitdemo.caaskit;
 
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
/**
 * Sha256Util
 *
 * @since 2019-02-12
 */
public class Sha256Util {
    private static final int DEFAULT_STRING_BUILDER_LENGTH = 128;
 
    private static final int HEX_LENGTH = 2;
 
    private static final int BYTE = 0xFF;
 
    private Sha256Util() {
    }
 
    /**
     * sha256 encryption
     *
     * @param strSrc the string to be encrypted
     * @return encrypted string
     */
    public static String encryptNumber(String strSrc) {
        if (strSrc == null) {
            return null;
        }
        MessageDigest md;
        String strDes;
        String encName = "SHA-256";
        try {
            md = MessageDigest.getInstance(encName);
            byte[] bt = strSrc.getBytes(StandardCharsets.UTF_8);
            md.update(bt);
            strDes = getString(md.digest()); // to HexString
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
        return strDes;
    }
 
    private static String getString(byte[] b) {
        StringBuffer sb = new StringBuffer(DEFAULT_STRING_BUILDER_LENGTH);
        String hex;
        for (byte b1 : b) {
            hex = Integer.toHexString(b1 & BYTE);
            if (hex.length() < HEX_LENGTH) {
                sb.append(0);
            }
            sb.append(hex);
        }
        return sb.toString();
    }
}

示例代码下载

huawei-CaaS-CustomCalls-android-demo.zip