【Android】根据Tencent IM 的Demo中的SplashActiviy 使用广告位或者公司展示网页 进行解析理解

需求提出

效果展示

在这里插入图片描述

审阅源码并进行总结了解如何实现的。

解析代码

  • 源码附上:
package com.tencent.qcloud.tim.demo;

import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;

import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.qcloud.tim.demo.bean.UserInfo;
import com.tencent.qcloud.tim.demo.login.LoginForDevActivity;
import com.tencent.qcloud.tim.demo.main.MainActivity;
import com.tencent.qcloud.tim.demo.utils.DemoLog;
import com.tencent.qcloud.tim.demo.utils.TUIUtils;
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
import com.tencent.qcloud.tuicore.util.ToastUtil;

/**
 * 这个是Demo中的前置Activity主要是充当前置画面的初展示
 */
public class SplashActivity extends BaseLightActivity {

    private static final String TAG = SplashActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
            getWindow().setNavigationBarColor(Color.TRANSPARENT);
        }

        handleData();
    }

    private void handleData() {
        //数据处理,全局单例模式
        UserInfo userInfo = UserInfo.getInstance();
        if (userInfo != null && userInfo.isAutoLogin()) {
            DemoApplication.instance().init(0);
            login();
        } else {
            startLogin();
        }
    }

    private void login() {
        //SDK 进行登录,依据用户的权限
        UserInfo userInfo = UserInfo.getInstance();
        TUIUtils.login(userInfo.getUserId(), userInfo.getUserSig(), new V2TIMCallback() {
            @Override
            public void onError(final int code, final String desc) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        ToastUtil.toastLongMessage(getString(R.string.failed_login_tip) + ", errCode = " + code + ", errInfo = " + desc);
                        startLogin();
                    }
                });
                DemoLog.i(TAG, "imLogin errorCode = " + code + ", errorInfo = " + desc);
            }

            @Override
            public void onSuccess() {
                startMain();
            }
        });
    }

    private void startLogin() {
        //无登录用户信息就需要进行初始化登录
        Intent intent = new Intent(SplashActivity.this, LoginForDevActivity.class);
        intent.putExtras(getIntent());
        startActivity(intent);
        finish();
    }

    private void startMain() {
        DemoLog.i(TAG, "MainActivity" );

        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        intent.putExtras(getIntent());
        intent.setData(getIntent().getData());
        startActivity(intent);
        finish();
    }
}

细节划分

  • 这个就是一个Activity具有UI相关界面,只是作为一个交互的作用并对后台进行一个屏蔽性的沟通交互。
  • 生命周期中的OnCreate,这一点基本在该Demo中所有的Activity的功能,对ui进行一个统一的样式处理(当然,也可以根据实际效果进行自定义处理)
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

        if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
            getWindow().setNavigationBarColor(Color.TRANSPARENT);
        }

        handleData();
    }
  • 在构建Create的时候就对数据进行handle处理,主要是对每一个用户的数据进行处理。判断是否SDK服务中有这个ID的存在,唯一标识,很重要。
 //数据处理,全局单例模式
        UserInfo userInfo = UserInfo.getInstance();
        if (userInfo != null && userInfo.isAutoLogin()) {
            DemoApplication.instance().init(0);
            login();
        } else {
            startLogin();
        }

以上的核心是UserInfo对象,这个对象就是存放IM中的用户信息的对象。采用单例模式

  • 在进行登录的时候操作是要跟TIM 的SDK 交互,该处我发现TIM的SDK可以将每个功能封装得很好,直接对每个api进行透明色,使用的时候方便。
 private void login() {
        //SDK 进行登录,依据用户的权限
        UserInfo userInfo = UserInfo.getInstance();
        TUIUtils.login(userInfo.getUserId(), userInfo.getUserSig(), new V2TIMCallback() {
            @Override
            public void onError(final int code, final String desc) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        ToastUtil.toastLongMessage(getString(R.string.failed_login_tip) + ", errCode = " + code + ", errInfo = " + desc);
                        startLogin();
                    }
                });
                DemoLog.i(TAG, "imLogin errorCode = " + code + ", errorInfo = " + desc);
            }

            @Override
            public void onSuccess() {
                //直接跳转到Demo的主要界面
                startMain();
            }
        });
    }

TUIUtils是该封装的core类!

  • 余下的方法主要是方法缝合,对Activity之间跳转交互进行一个操作。

    private void startLogin() {
        //无登录用户信息就需要进行初始化登录
        Intent intent = new Intent(SplashActivity.this, LoginForDevActivity.class);
        intent.putExtras(getIntent());
        startActivity(intent);
        finish();
    }

    private void startMain() {
        DemoLog.i(TAG, "MainActivity" );

        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        intent.putExtras(getIntent());
        intent.setData(getIntent().getData());
        startActivity(intent);
        finish();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值