智慧服务,成就美好体验 项目咨询

主页 > 服务与支持 > 开发平台 > 客户端SDK参考 > Android Native SDK > 快速入门 快速入门

入门使用

快速入门

更新时间:2019-11-20

开发环境准备

在开发的过程中请满足如下环境要求。

表1 环境要求

环境和工具名称

版本要求

操作系统

Windows 7专业版

Android Studio

Android Studio3.0及以上版本

会议云服务的用户帐号

帐号可来源于华为公有云。开通方法请参见“开发前准备”。

新建工程项目

  1. 打开Android Studio,选择File > New > New Project… ,进入Activity展示效果界面。

     

    图1 Activity展示效果界面 

     

  2. 填写“Name”“Package name”“Save location”信息,选取最低支持系统的SDK版本后,单击“Finish”,进入工程主界面。

     

    图2 工程配置界面 

     

  3. 在工程主界面中,选择文件“MainActivity”“activity_main”,将文件重命名为“LoginActivity”“activity_login”

     

    图3 工程主界面 

     

引入依赖库

将SDK压缩包解压后相关文件拷贝到工程的libs路径下。

  1. 将so文件存放到“libs/armeabi”文件夹下,jar文件存放“libs”文件夹下,如图4所示。

     

    图4 复制文件 

     

  2. 单击“Sync”同步工程,如图5所示。

     

    图5 同步工程 

     

添加类

application

  1. 右键单击已经新建的包名“com.huawei.esdk.tup.helloworld”文件夹,右键选择“New > Package”,弹出”New Package”窗口。在输入框中输入“application”,单击“OK”,完成包的新建。

     

     

  2. 右键单击“com.huawei.esdk.tup.helloworld.application”包,选择“New > Java Class”,弹出“Create New Class”窗口。在”Name”处输入“ECApplication”,单击“OK”,完成类的新建。

     

     

Service

  1. 右键单击已经新建的包名“com.huawei.esdk.tup.helloworld”文件夹,右键选择“New > Package”,弹出”New Package”窗口。在输入框中输入“service”,点击“OK”,完成包的新建。

     

     

  2. 右键“com.huawei.esdk.tup.helloworld.service”包,选择“New > Java Class”,弹出“Create New Class”窗口。在”Name”处输入“TupLoginService”,点击“OK”,完成类的新建。

     

     

  3. 右键“com.huawei.esdk.tup.helloworld.service”包,选择“New > Java Class”,弹出“Create New Class”窗口。在”Name”处输入“ServiceNotify”,点击“OK”,完成类的新建。

     

     

ui

  1. 右键单击已经新建的包名“com.huawei.esdk.tup.helloworld”文件夹,右键选择“New > Package”,弹出”New Package”窗口。在输入框中输入“ui”,点击“OK”,完成包的新建。

     

     

  2. 右键“com.huawei.esdk.tup.helloworld”包,选择“LoginActivity.java”右击复制,拷贝到"ui"目录下。

     

     

工程配置

  1. 单击“res->values”,找到该文件夹下的“strings.xml”文件,添加配置代码。

     

    <resources>
        <string name="app_name">HelloWorld</string>
        <string name="register_server">RegServer</string>
        <string name="server_port">ServerPort</string>
        <string name="account">Account</string>
        <string name="password">Password</string>
        <string name="login">Login</string>
        <string name="login_success">Login success</string>
        <string name="account_information_not_empty">Please enter your login parameters</string>
        <string name="set_permission_write">Please enable storage permission in the settings, otherwise the function will not be available.</string>
    </resources>
    
     

     

  2. 配置“app”文件夹下的“build.gradle”文件,工程创建后,在“build.gradle”中添加如下示例代码:

     

    说明: 

    targetSdkVersion版本需要在25及以上(targetSdkVersion 25)

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "26.0.1"
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        defaultConfig {
            applicationId "com.huawei.esdk.tup.helloworld"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        sourceSets {
            main {
                assets.srcDirs = ['assets', 'src/main/assets', 'src/main/assets/']
                jniLibs.srcDirs = ['libs']
            }
            instrumentTest.setRoot('tests')
            debug.setRoot('build-types/debug')
            release.setRoot('build-types/release')
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support.constraint:constraint-layout:1.0.2'
        testCompile 'junit:junit:4.12'
        compile 'com.google.code.gson:gson:2.3.1'
        implementation 'androidx.core:core:1.0.2'
    }
    
     

     

  3. AndroidManifest.xml文件中添加如下权限代码:

     

     <!-- uses permission -->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    
     

     

编码实现

总体结构

--- src 
 --- main 
  --- java 
    --- com.huawei.esdk.uc.helloworld.application 
       --- ECApplication.java 
    --- com.huawei.esdk.uc.helloworld.service 
       ---TupLoginService.java
    --- com.huawei.esdk.uc.helloworld.ui
       ---LoginActivity.java
  ---res 
    --- layout 
      ---activity_login.xml 
    --values 
      ---strings.xml 
 ---AndroidManifest.xml
 

源码链接:Hello World源码文件

代码参考

  • 在AndroidManifest.xml清单文件中指定ECApplication
    <application
            android:name=".application.ECApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true">
            <activity android:name=".ui.LoginActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
     
  • 编写LoginActivity类,初始化组件
    /**
     * Init int.
     * @param context the context
     * @param appPath the app path
     * @return the result
     */
    public boolean startService(Context context, String appPath)
    {
    	int ret;
    	tsdkManager = TsdkManager.getInstance(context, appPath, ServiceNotify.getInstance());
    
    	/* Step 1, set log param */
    	TsdkLogParam logParam = new TsdkLogParam();
    	logParam.setFileCount(1);
    	logParam.setLevel(TsdkLogLevel.TSDK_E_LOG_DEBUG);
    	logParam.setMaxSizeKb(1024 * 4);
    	logParam.setPath(Environment.getExternalStorageDirectory() + File.separator + "HelloWorld" + "/");
    
    	ret = tsdkManager.setConfigParam(logParam);
    	if (ret != 0) {
    		return false;
    	}
    
    	/* Step 2, init sdk */
    	TsdkAppInfoParam appInfoParam = new TsdkAppInfoParam();
    	appInfoParam.setClientType(TSDK_E_CLIENT_MOBILE);
    	appInfoParam.setProductName("eSDK-Mobile");
    	appInfoParam.setDeviceSn("123");
    	appInfoParam.setSupportAudioAndVideoCall(1);
    	appInfoParam.setSupportAudioAndVideoConf(0);
    	appInfoParam.setSupportDataConf(0);
    	appInfoParam.setSupportCtd(0);
    	appInfoParam.setSupportEnterpriseAddressBook(0);
    	appInfoParam.setSupportIm(0);
    	appInfoParam.setSupportRichMediaMessage(0);
    
    	ret = tsdkManager.init(appInfoParam);
    	if (ret != 0)
    	{
    		return false;
    	}
    	return true;
    }
    
     
  • 编写ECApplication类,去初始化
        @Override
        public void onTerminate() {
            super.onTerminate();
            tsdkManager.uninit();
        }
    
     
  • 编写TupLoginService服务类,Uportal鉴权登录
        /**
         * Authorize login boolean.
         *
         * @param regServer  the reg server
         * @param serverPort the server port
         * @param sipNumber  the sip number
         * @param password   the password
         * @return the boolean
         */
        public boolean authorizeLogin(String regServer, String serverPort, String sipNumber, String password)
        {
            int ret;
    
            TsdkLoginParam tsdkLoginParam = new TsdkLoginParam();
            tsdkLoginParam.setUserId(1);
            tsdkLoginParam.setAuthType(TsdkAuthType.TSDK_E_AUTH_NORMAL);
            tsdkLoginParam.setUserName(sipNumber);
            tsdkLoginParam.setPassword(password);
            tsdkLoginParam.setServerAddr(regServer);
            tsdkLoginParam.setServerPort(Integer.parseInt(serverPort));
            tsdkLoginParam.setServerVersion("");
            tsdkLoginParam.setServerType(TsdkServerType.TSDK_E_SERVER_TYPE_PORTAL);
            tsdkLoginParam.setUserTiket("");
    
            ret = TsdkManager.getInstance().getLoginManager().login(tsdkLoginParam);
            if (ret != 0) {
                return false;
            }
            return true;
        }
    
     
  • ServiceNotify实现TsdkNotify后重写onEvtAuthSuccess()方法,鉴权成功发送广播。
        @Override
        public void onEvtAuthSuccess(int i, TsdkImLoginParam tsdkImLoginParam) {
            TupLoginService.getInstance().handleAuthSuccess();
        }
        public void handleAuthSuccess() {
            Log.d("TupLoginService", "onEvtAuthSuccess.");
    
            Intent intent = new Intent();
            intent.setAction(TUP_REGISTER_EVENT);
            intent.putExtra(REGISTER_RESULT, 0);
            ECApplication.getApp().sendBroadcast(intent);
        }
    
     
  • UI层注册监听广播,保证调用鉴权接口后收到相应回调。
        private BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (TupLoginService.TUP_REGISTER_EVENT.equals(action))
                {
                    int result = intent.getIntExtra(TupLoginService.REGISTER_RESULT, -1);
                    switch (result)
                    {
                        case 0:
                            Toast.makeText(LoginActivity.this, getString(R.string.login_success), Toast.LENGTH_LONG).show();
                            break;
                        default:
                            break;
                    }
                }
            }
        };
    
     

调试运行

  1. 单击菜单栏“Run > Run > app”文件,选择真机调试或者运行虚拟机。

     

    图6 界面 

     

  2. 在界面中依次输入如下表信息:

     

    分类

    输入信息

    说明

    鉴权信息

    RegServer

    注册服务器地址

    Server port

    服务器端口号

    Account

    服务号码

    Password

    eSDK鉴权密码

    说明: 

    以上信息需要在成功预约华为远程实验室后,从远程实验室获取。

    服务器地址、端口号、用户名、密码输入完成后,单击“登录”按钮,界面显示“正在登录,请稍后”,等待接口返回操作结果。

     

  3. 等待至页面底部弹出Toast“Login Success”,表示登录成功。

     

    图7 登录成功