美文网首页
android App一段时间没有操作或没有点击屏幕后弹出广告,

android App一段时间没有操作或没有点击屏幕后弹出广告,

作者: maiduoduo | 来源:发表于2020-06-20 15:15 被阅读0次

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();
 

第二步:设置定时广告

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一段时间没有操作或没有点击屏幕后弹出广告,

      本文链接:https://www.haomeiwen.com/subject/hnawxktx.html