android App没有操作一段时间后弹出屏保广告页面

最近做了个项目,里面有个功能是app在任何activity中没有操作一段时间后要跳转到屏保广告页面,点击广告页面是返回上一个activity中,并且广告页面是客户在后台设置的多张图片或者gif。也可以改成是app在没有一段时间没有点击屏幕后跳转到特定的界面等等,可以自己修改。
那么,来想想这功能的实现思路吧。首先,是全部activity都要有这功能,那就在一个BaseActivity里面实现该功能,然后其他Activity继承BaseActivity就可以了。
第一步 :app设置长亮,不可暗屏,抽象一个公共的方法给子类Activity设置layout。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
    //设置屏幕长亮
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    setContentView(getLayoutRes());

}protected abstract int getLayoutRes();

@Override
第二步:设置定时广告
private long advertisingTime = 15 * 1000;//定时跳转广告时间
/**
 * 跳轉廣告
 */
public void startAD() {if (countDownTimer == null) {countDownTimer = new CountDownTimer(advertisingTime, 1000l) {@Override
            public void onTick(long millisUntilFinished) {}@Override
            public void onFinish() {//定时完成后的操作

            }};
        countDownTimer.start();
    } else {countDownTimer.start();
    }
}
第三步:设置屏幕点击监听;这一步要重写dispatchTouchEvent就好了,不要重写onTouchEvent。onTouchEvent自能监听到空白处的点击,其他控件或者是View的点击事件是监听不到的。不了解的可以看一下事件分发。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN://有按下动作时取消定时
            if (countDownTimer != null){countDownTimer.cancel();
            }break;
        case MotionEvent.ACTION_UP://抬起时启动定时
            startAD();
            break;
    }return super.dispatchTouchEvent(ev);
}
第四步:广告定时在activity启动或者是取消操作, CountDownTimer在Activity销毁或者是不在前台还是在运行的,所以要在Activity的生命周期中控制一下。
@Override
protected void onResume() {super.onResume();
    //显示是启动定时
    startAD();
}@Override
protected void onPause() {super.onPause();
    //当activity不在前台是停止定时
    if (countDownTimer != null){countDownTimer.cancel();
    }
}@Override
protected void onDestroy() {super.onDestroy();
    //销毁时停止定时
    if (countDownTimer != null){countDownTimer.cancel();
    }
}
将代码贴出来,有什么不对的欢迎指出:
BaseActivity的代码:
package com.demo.myadvertising;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.WindowManager;
/**
 * Author:
 * Date: 2017/8/10
 * Description:
 */

public abstract class BaseActivity extends AppCompatActivity {public CountDownTimer countDownTimer;
    private long advertisingTime = 15 * 1000;//定时跳转广告时间
    public Context context;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        //设置屏幕长亮
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        context = this;
        setContentView(getLayoutRes());

    }protected abstract int getLayoutRes();

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN://有按下动作时取消定时
                if (countDownTimer != null){countDownTimer.cancel();
                }break;
            case MotionEvent.ACTION_UP://抬起时启动定时
                startAD();
                break;
        }return super.dispatchTouchEvent(ev);
    }/**
     * 跳轉廣告
     */
    public void startAD() {if (countDownTimer == null) {countDownTimer = new CountDownTimer(advertisingTime, 1000l) {@Override
                public void onTick(long millisUntilFinished) {}@Override
                public void onFinish() {//定时完成后的操作
                    //跳转到广告页面
                    startActivity(new Intent(context,ADActivity.class));
                }};
            countDownTimer.start();
        } else {countDownTimer.start();
        }}@Override
    protected void onResume() {super.onResume();
        //显示是启动定时
        startAD();
    }@Override
    protected void onPause() {super.onPause();
        //当activity不在前台是停止定时
        if (countDownTimer != null){countDownTimer.cancel();
        }}@Override
    protected void onDestroy() {super.onDestroy();
        //销毁时停止定时
        if (countDownTimer != null){countDownTimer.cancel();
        }}
}
其他Activity继承BaseActivity就可以实现功能,例如MainActivity:
package com.demo.myadvertising;
import android.os.Bundle;
public class MainActivity extends BaseActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
    }@Override
    protected int getLayoutRes() {return R.layout.activity_main;
    }
}

android App一段时间没有操作或没有点击屏幕后弹出广告,或者一段时间没有点击屏幕进行特定操作。相关推荐

  1. android 加号弹出菜单,Android仿微信、qq点击右上角加号弹出操作框

    Android仿微信.qq点击右上角加号弹出操作框,先上图,类似于下图这种,点击加号,会弹出一个对话框,如下图: 微信: 自己实现: 接下来,我们来实现此功能: 其实,实现原理就是,点击"+ ...

  2. Android自定义弹窗模仿微信,Android仿微信、qq点击右上角加号弹出操作框

    Android仿微信.qq点击右上角加号弹出操作框,先上图,类似于下图这种,点击加号,会弹出一个对话框,如下图: 微信: 自己实现: 接下来,我们来实现此功能: 其实,实现原理就是,点击"+ ...

  3. Android --- 进入页面时,不弹出软键盘。当 EditText 被点击时不弹出软键盘,而是调用其他选择器,比如时间选择器等

    功能需求: 1.进入页面时,不弹出软键盘 2.当 EditText 被点击时不弹出软键盘,而是调用其他选择器,比如时间选择器等 搜索百度测试: 1.百度上说用 editText.setInputTyp ...

  4. php 点击文本框弹出时间,点击Input框弹出日期选项

    点击text文本框弹出日期选择器 body{margin:0;padding:0;font:14px Verdana, Arial, sans-serif;line-height:200%;} #co ...

  5. Android学习问题:关于AlertDialog中自定义布局带有的EditText无法弹出键盘

    最近在用到AlertDialog的时候,自定义了其布局文件,其中带有EditText,但是发现在手机上使用的时候,点击EditText却没有弹出键盘,在网上搜索了下,看到有好几种解决方法,试过其中一些 ...

  6. android弹出广告cn.yipianfengye.android:ad-library:1.0使用

    1.添加依赖 //广告弹屏 implementation 'cn.yipianfengye.android:ad-library:1.0' 2.添加权限下面使用 3.添加数据 /*** 初始化数据*/ ...

  7. bootstrap-table:操作栏点击编辑按钮弹出模态框修改数据

    核心代码: columns: [{checkbox:true //第一列显示复选框 },...{field: 'fail_num',title: '失败数'},{field: 'operate',ti ...

  8. CACTI安装后不出图问题解决方法(由于时间问题引起的)

    这个问题是由于时间问题引起的!查看cacti的日志就可以看出来: Log File [Total Lines: 14 - All Items Shown] 05/18/2012 09:50:49 AM ...

  9. cm10主题android l,G12 CM10.1透明,风V4音效农历短信弹出 来电显示各类特效,漂亮主题...

    您可能感兴趣的话题: rom刷机 核心提示: 注意事项: 1. 本刷机教程需在windows操作系统下进行 2. 记录机器12位S/N号(拆卸电池后可见) 3. 刷机前确保手机电量不少于50% 4. ...

最新文章

  1. DecimalFormat 的使用
  2. 初学者如何开发出高质量J2EE系统
  3. django-url的分发, 2)起别名, 3)根目录,4)rediect跳转函数:
  4. 内网访问不到内网网站问题和不用端口号访问网站问题
  5. Java反序列化json内存溢出_fastJson与一起堆内存溢出'血案'
  6. php速度优化,php优化及高效提速问题小结
  7. 鸿蒙系统下载 绿色,PGWARE PcMedik
  8. [跟我学中小企业架构部署]之八:备份服务器部署
  9. python读取文件名有中文_[请教]python的中文文件名处理
  10. 转 国内的go get问题的解决
  11. JQueryEasyUI datagrid框架的基本使用
  12. 计算机二级C语言题库(60套真题+刷题软件)2022年9月份新题第一套
  13. 如何在html中使用特殊字体
  14. CAD贱人工具箱6.0免注册
  15. 理解马尔可夫决策过程
  16. unity3D中导出webgl并使用js进行交互
  17. python代码怎么换行继续写_python代码太长怎么换行
  18. 微机原理与接口技术 重点详解与章节总结——微处理器CPU的系统结构
  19. 郑莉java课后答案,Java语言程序设计(郑莉)第三章课后习题答案
  20. 服务器蓝屏显示7f,困扰多日的7F蓝屏

热门文章

  1. 认真推荐9个优质的技术公众号
  2. 会计政策 会计核算体系 账簿
  3. 专科计算机学生比211强,别再瞧不起专科!一所211大学,专科专业的“就业率”远高于本科...
  4. 牛顿开方法的算法及其原理
  5. matlab 蒙特卡洛树搜索算法_蒙特卡罗方法入门、蒙特卡洛树简介(转载)
  6. Java配置JDK环境变量、自动安装JRE(详细)
  7. 图像质量评估(5) -- 畸变(Distortion)
  8. 03_Java异常面试题(2020最新版)
  9. 【2014-06-07】-珠海长隆海底世界
  10. 不刷单,中小卖家如何做爆款?