Android实现启动展示广告页功能

需求:

在App应用退出后(此时App是在后台运行的,并不是进程被杀死),每当用户再次将该应用切换到前台显示时,总能向用户展示3S的广告页。

思路:

1.在LaunchActivity中加载好广告数据,用户首次进入应用时不展示广告,而是将广告数据存储到数据库,下次使用。

2.用户一直按back键,退到MainActivity时,不销毁MainActivity,而是跳转到LaunchActivity,在LaunchActivity中跳转到Home界面(手机的菜单界面),此时我们的应用的栈中存在两个Activity(LaunchActivity,MainActivity)重点是MainActivity的启动模式设置为SingleTask。然后配合跳转的业务逻辑就能实现每次进入应用播放广告的需求

代码实现:

BaseActivity的onKeyDown方法,MainActivity继承BaseACtivity

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK &&
                MyActivityManager.getMyActivityManager().getActSize() == 1 &&
                MyActivityManager.getMyActivityManager().isActivityExist(MainActivity.class)) {
            Intent intent = new Intent(this, SplashActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.putExtra("flag", 2);
            startActivity(intent);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

LaunchActivity没有继承BaseActivity,LaunchActivity(我的叫SplashActivity)的代码逻辑如下:

1、onCreate方法

//onCreate方法
 @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //将window的背景图置空
        getWindow().setBackgroundDrawable(null);
        //是否全屏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        setContentView(R.layout.activity_splash);
        skipAd = findViewById(R.id.skipAd);
        screenIV = findViewById(R.id.screenIV);
        emptyViewParent = findViewById(R.id.emptyViewParent);
        TextView emptyTv = findViewById(R.id.emptyTv);
        emptyTv.setText("暂无网络,请检查网络连接!");

        Intent intent = getIntent();
        if (intent != null && intent.getIntExtra("flag", 0) == 2) {
            Intent home = new Intent(Intent.ACTION_MAIN);
            home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            home.addCategory(Intent.CATEGORY_HOME);
            startActivity(home);
        } else {
                launchSplash();
        }
    }

2、onRestart方法,当用户将应用切换到前台时,会走LaunchActivity的onRestart方法

    @Override
    protected void onRestart() {
        super.onRestart();
        launchSplash();
    }

3、launchAplash方法,申请权限,获取广告数据

private void launchSplash() {
        /**
         * 由后台接口控制,开屏页是否显示广告
         */
        if (launchPresenter == null)
            launchPresenter = new LaunchPresenter(this);
        /**
         * 检查网络
         */
        boolean hasNetwork = NetUtils.hasNetwork(this);
        if (hasNetwork) {
            getPermissions();
        } else {
            screenIV.setVisibility(View.GONE);
            emptyViewParent.setVisibility(View.VISIBLE);
        }
    }

4、getPermission方法申请权限,其中showLaunchImg获取广告数据,并在回调中判断数据库中是否有广告数据,有则展示广告,获取新广告更新广告缓存,跳转MainActivity;没有则调用获取广告的接口获取广告,在回调中缓存广告,跳转MainActivity

//获取全部权限
    @SuppressLint("CheckResult")
    private void getPermissions() {
        RxPermissions rxPermissions = new RxPermissions(this);
        rxPermissions.requestEach(PermissionC.APP_PERMISSION)
//                .observeOn(Schedulers.io())
//                .subscribeOn(AndroidSchedulers.mainThread())
                .subscribe(permission -> {
                    if (permission.name.equals(Manifest.permission.ACCESS_COARSE_LOCATION)
                            && permission.granted) {
                        Location location = LocationMonitor.getInstance(SplashActivity.this,
                                SplashActivity.this).getLocation();
                        if (location != null)
                            getCity(location);
                       //获取广告数据
                        showLaunchImg();
                    }
                });
    }

基本的逻辑就是这样,是否显示广告,可以由后台在接口中用字段进行控制。具体的可按照你的业务逻辑进行扩展实现!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金戈鐡馬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值