Androidアプリはしばらく操作していないか、画面をクリックして広告をポップアップしていないか、画面をクリックして特定の操作をしていない.
19334 ワード
Androidアプリがしばらく操作されていないと、スクリーンセーバーの広告ページがポップアップします.
最近、appがどのactivityでも操作されていない間に屏保広告ページにジャンプし、広告ページをクリックするのは前のactivityに戻り、広告ページはお客様がバックグラウンドで設定した複数の画像やgifです.また、appがしばらく画面をクリックしていないうちに特定のインタフェースにジャンプするなど、自分で修正できるように変更することもできます.
では、この機能の実現の考え方を考えてみましょう.まず、すべてのactivityがこの機能を持っていなければならないので、1つのBaseActivityでその機能を実現し、他のActivityがBaseActivityを継承すればいいのです.
ステップ1:app設定は明るく、暗いスクリーンはできません.共通の方法を抽象的にサブクラスActivityにlayoutを設定します.
ステップ2:タイミング広告の設定
第三歩:スクリーンクリックリスニングを設定する;このステップはdispatchTouchEventを書き直せばいいので、onTouchEventは書き直さないでください.onTouchEventは空白のクリックを傍受することができ、他のコントロールやViewのクリックイベントは傍受できません.知らない人はイベント配布を見てもいいです.
ステップ4:広告タイミングがactivityで起動またはキャンセルされ、CountDownTimerがActivityで破棄されたり、フロントで実行されていないか、Activityのライフサイクルで制御されます.
コードを貼り付けて、何か間違いがあったら指摘してください.
BaseActivityのコード:
その他のActivityはBaseActivityを継承して機能を実現できます.たとえば、MainActivity:
最近、appがどのactivityでも操作されていない間に屏保広告ページにジャンプし、広告ページをクリックするのは前のactivityに戻り、広告ページはお客様がバックグラウンドで設定した複数の画像やgifです.また、appがしばらく画面をクリックしていないうちに特定のインタフェースにジャンプするなど、自分で修正できるように変更することもできます.
では、この機能の実現の考え方を考えてみましょう.まず、すべてのactivityがこの機能を持っていなければならないので、1つのBaseActivityでその機能を実現し、他のActivityがBaseActivityを継承すればいいのです.
ステップ1: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
ステップ2:タイミング広告の設定
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);
}
ステップ4:広告タイミングが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;
}
}