文档管理中心
我的

屏幕共享

代码结构

展开

模块

文件名

文件用途

CaaSEngineDemo

CaasKitHelper.java

对CaaS Engine接口的封装类。

CaasKitApplication.java

全局的Application。

CaasKitDemoActivity.java

全局Activity布局文件。

Screen sharing Demo

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.HwCaasHandler;
import com.huawei.caas.caasservice.HwCaasServiceCallBack;
import com.huawei.caas.caasservice.HwCaasServiceManager;
import com.huawei.caas.caasservice.HwCaasUtils;
import com.huawei.caas.caasservice.HwCallStateCallBack;
import com.huawei.caaskitdemo.CaasKitApplication;
 
/**
 * CaasKit Helper.
 *
 * @since 2019-10-21
 */
public class CaasKitHelper {
    private static final String TAG = "CaasKitHelper";
 
    private static final int VIEWHEIGHT = 248;
 
    private static final int VIEWWIDTH = 256;
 
    private static final int LOCATION_X = 102;
 
    private static final int LOCATION_Y = 140;
 
    private static CaasKitHelper sCaasKitHelper;
 
    private HwCaasServiceManager mHwCaasServiceManager;
 
    private HwCaasHandler mHwCaasHandler;
 
    private Context mContext;
 
    private boolean mIsSendShowFail;
 
    private boolean mIsCaasKitInit;
 
    private boolean mIsHasCaaSContacts = false;
 
    private HwCallStateCallBack mCallStateCallBack = new HwCallStateCallBack() {
        @Override
        public void notifyCallState(HwCaasUtils.CallState state) {
            Log.d(TAG, "callState: " + state);
        }
    };
 
    private HwCaasServiceCallBack mCallBack = new HwCaasServiceCallBack() {
        @Override
        public void initSuccess(HwCaasHandler handler) {
            // callback after successful initialization of HwCaasHandler.
            mHwCaasHandler = handler;
            if (mHwCaasHandler != null) {
                // 显示在对端呼入界面的来电应用名称,必须设置,不然畅连入口无法显示
                mHwCaasHandler.setCallerAppName("Application");
                // 联系人选择悬浮窗也可以选择全屏列表(类似系统联系人界面)
                mHwCaasHandler.setContactViewStyle(HwCaasUtils.ContactsViewStyle.FULL_SCREEN);
 
                // 当选择悬浮窗时,可设置悬浮窗的大小和初始位置,选择全屏联系人界面了这些设置就不需要了
//                mHwCaasHandler.setContactViewStyle(HwCaasUtils.ContactsViewStyle.FLOAT_VIEW);
//                mHwCaasHandler.setContactViewSize(VIEWWIDTH, VIEWHEIGHT);
//                mHwCaasHandler.setFloatViewLocation(HwCaasUtils.STARTVIEW,
//                        HwCaasUtils.POINT_RIGHTANDDOWN, LOCATION_X, LOCATION_Y);
//                mHwCaasHandler.setFloatViewLocation(HwCaasUtils.CONTACTVIEW, HwCaasUtils.POINT_RIGHTANDDOWN, LOCATION_X, LOCATION_Y);
 
                //监听通话状态,呼出中,通话中,无通话,不关心则不用设置
                mHwCaasHandler.setCallStateCallBack(mCallStateCallBack);
                //查询是否有符合要求的联系人,ContactsType.NORMAL_CONTACTS - 普通畅连联系人;ContactsType.SCREEN_SHARING_CONTACTS - 支持屏幕共享的联系人
                mIsHasCaaSContacts = mHwCaasHandler.hasCaaSContacts(HwCaasUtils.ContactsType.SCREEN_SHARING_CONTACTS);
                if (mIsSendShowFail) {
                    sendShow();
                    mIsSendShowFail = false;
                }
            }
        }
 
        @Override
        public void initFail(int retCode) {
            // callback if init Handler fail.
            Log.i(TAG, "retCode: " + retCode);
        }
 
        @Override
        public void releaseSuccess() {
            // callback after successful release of mHwCaasServiceManager.
            mHwCaasHandler = null;
            mIsSendShowFail = false;
        }
    };
 
    private CaasKitHelper() {
        mContext = CaasKitApplication.getContext();
    }
 
    public synchronized static CaasKitHelper getInstance() {
        if (sCaasKitHelper == null) {
            sCaasKitHelper = new CaasKitHelper();
        }
        return sCaasKitHelper;
    }
 
    public void caasKitInit() {
        Log.d(TAG, "caasKitInit.");
        if (!mIsCaasKitInit) {
            // initialize mHwCaasServiceManager instance.
            mHwCaasServiceManager = HwCaasServiceManager.init();
            // initialize HwCaasHandler instance through handlerType.
            mHwCaasServiceManager.initHandler(mContext, HwCaasUtils.SCREEN_SHARING_TYPE, mCallBack);
            mIsCaasKitInit = true;
        }
    }
 
    public void sendShow() {
        Log.d(TAG, "sendShow.");
        if (mHwCaasHandler != null) {
            Log.d(TAG, "isHasCaaSContacts: " + mIsHasCaaSContacts);
            if (mIsHasCaaSContacts) {
                // 点击入口在应用侧,直接显示联系人列表
                boolean ret = mHwCaasHandler.sendEventToCaasService(HwCaasUtils.SHOW_CONTACTS);
                // 应用侧控制显示悬浮球,用户点击后显示联系人列表
//                boolean ret = mHwCaasHandler.sendEventToCaasService(HwCaasUtils.SHOW);
                Log.d(TAG, "ret: " + ret);
            }
        } else {
            mIsSendShowFail = true;
            Log.e(TAG, "sendShow fail.");
        }
    }
 
    public boolean sendHide() {
        Log.d(TAG, "sendHide.");
        if (mHwCaasHandler != null) {
            // 隐藏联系人列表与 HwCaasUtils.SHOW_CONTACTS 配对使用
            boolean ret = mHwCaasHandler.sendEventToCaasService(HwCaasUtils.HIDE_CONTACTS);
            // 隐藏悬浮球与 HwCaasUtils.SHOW 配对使用
//            boolean isSendoK = mHwCaasHandler.sendEventToCaasService(HwCaasUtils.HIDE);
            Log.d(TAG, "ret: " + ret);
            return ret;
        }
        Log.e(TAG, "sendHide fail.");
        return false;
    }
 
    public void pauseShare() {
        Log.d(TAG, "pauseShare.");
        if (mHwCaasHandler != null) {
            boolean isSendoK = mHwCaasHandler.sendEventToCaasService(HwCaasUtils.SCREEN_SHARING_PAUSE);
            Log.d(TAG, "isSendoK: " + isSendoK);
        }
    }
 
    public void resumeShare() {
        Log.d(TAG, "resumeShare.");
        if (mHwCaasHandler != null) {
            boolean isSendoK = mHwCaasHandler.sendEventToCaasService(HwCaasUtils.SCREEN_SHARING_RESUME);
            Log.d(TAG, "isSendoK: " + isSendoK);
        }
    }
 
    public void caasKitRelease() {
        Log.d(TAG, "caasKitRelease.");
        if (mIsCaasKitInit) {
            if (mHwCaasServiceManager != null) {
                // source release.
                mHwCaasServiceManager.release();
                mHwCaasServiceManager = null;
            }
            mIsCaasKitInit = false;
        }
    }
}

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;
    }
}

CaasKitDemoActivity.java

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
 */
 
package com.huawei.caaskitdemo;
 
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.huawei.caaskitdemo.caaskit.CaasKitHelper;
 
public class CaasKitDemoActivity extends AppCompatActivity {
    private static final String TAG = "CaaSKitDemoActivity";
 
    private Button mCallShow;
 
    private Button mCallHide;
 
    private Button mSharePause;
 
    private Button mShareResume;
 
    private TextView mPasswordView;
 
    private ImageView mBackgroundView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_caaskitdemo);
        CaasKitHelper.getInstance().caasKitInit();
        mCallShow = findViewById(R.id.call_show);
        mCallHide = findViewById(R.id.call_hide);
        mCallShow.setOnClickListener(v ->{
            CaasKitHelper.getInstance().sendShow();
        });
        mCallHide.setOnClickListener(v ->{
            CaasKitHelper.getInstance().sendHide();
        });
        mSharePause = findViewById(R.id.share_pause);
        mShareResume = findViewById(R.id.share_resume);
        mSharePause.setOnClickListener(v ->{
            CaasKitHelper.getInstance().pauseShare();
        });
        mShareResume.setOnClickListener(v ->{
            CaasKitHelper.getInstance().resumeShare();
        });
        mPasswordView = findViewById(R.id.paasword_view);
        mPasswordView.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                Log.d(TAG, "onFocusChange:" + hasFocus);
                if (hasFocus) {
                    CaasKitHelper.getInstance().pauseShare();
                } else {
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
                    CaasKitHelper.getInstance().resumeShare();
                }
            }
        });
        mBackgroundView = findViewById(R.id.back_ground);
        mBackgroundView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View var1, MotionEvent var2) {
                if (mPasswordView != null) {
                    mPasswordView.clearFocus();
                }
                return true;
            }
        });
    }
 
    @Override
    protected void onPause() {
        Log.d(TAG, "onPause.");
        CaasKitHelper.getInstance().pauseShare();
        super.onPause();
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop.");
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume.");
        CaasKitHelper.getInstance().resumeShare();
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy.");
        CaasKitHelper.getInstance().caasKitRelease();
    }
}