在插屏广告之前在屏幕上显示进度条
Show Progress Bar on Screen before Interstitial Ad
我正在开发 Android 实现 Admob 插页式广告的应用程序。我想要的是处理程序锁定屏幕并显示进度条两秒钟,然后显示插页式广告。
我所做的是通过创建动画并在 InterstitialAd.show
方法之后调用它来为插页式广告设置动画。
mInterstitialAd!!.adListener = object: AdListener() {
override fun onAdLoaded() {
btnstart.setOnClickListener(View.OnClickListener {
if (mInterstitialAd!!.isLoaded) {
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
} else {
sharpref!!.privacyPolicyAccepted()
if (!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
} else {
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
})
}
代码为 overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
Interstiial 广告设置了动画,但我想要的是在 interstitail 广告打开前显示 Pogress 栏两秒钟。
Logcat 崩溃后
2020-12-04 10:29:03.603 577-1239/? E/PackageManager: liangshuang2, setEnabledSetting, packageName=com.google.android.apps.youtube.mango,,className=androidx.work.impl.background.systemjob.SystemJobService,,,newState=1,,flags=1,,userId=0,,callingPackage=null
2020-12-04 10:29:04.309 577-5614/? E/PackageManager: liangshuang2, setEnabledSetting, packageName=com.google.android.apps.youtube.mango,,className=androidx.work.impl.background.systemalarm.RescheduleReceiver,,,newState=1,,flags=1,,userId=0,,callingPackage=null
2020-12-04 10:35:56.218 22376-22565/? E/AndroidRuntime: FATAL EXCEPTION: Timer-0
Process: com.techpaliyal.bottomcutoutnavigation, PID: 22376
java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
at android.widget.Toast$TN.<init>(Toast.java:405)
at android.widget.Toast.<init>(Toast.java:117)
at android.widget.Toast.makeText(Toast.java:292)
at android.widget.Toast.makeText(Toast.java:282)
at
com.maximus.technologies.views.activities.SplashActivity$setClickListeners$onAdLoaded$$special$$inlined$timerTask.run(Timer.kt:149)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
2020-12-04 10:36:00.841 577-739/? E/UsbDeviceManager: unknown state HWDISCONNECTED
--------- beginning of main
2020-12-04 10:36:00.921 763-763/? E/licong: onReceive
2020-12-04 10:36:00.929 577-596/? E/BatteryExternalStatsWorker: no controller energy info supplied for wifi
2020-12-04 10:36:00.942 577-596/? E/BatteryExternalStatsWorker: no controller energy info supplied for bluetooth
2020-12-04 10:36:01.171 577-596/? E/BatteryExternalStatsWorker: no controller energy info supplied for wifi
更新代码
btnstart.setOnClickListener(View.OnClickListener {
mInterstitialAd!!.adListener = object: AdListener() {
override fun onAdLoaded() {
if (mInterstitialAd!!.isLoaded) {
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
} else {
sharpref!!.privacyPolicyAccepted()
if (!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
} else {
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
}
override fun onAdFailedToLoad(adError: LoadAdError) {
if (mInterstitialAd!!.isLoaded) {
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
} else {
sharpref!!.privacyPolicyAccepted()
if (!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
} else {
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
}
override fun onAdOpened() {}
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdLeftApplication() {
// Code to be executed when the user has left the app.
}
override fun onAdClosed() {
if(!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
}
else
{
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
}
})
}
有关计时器的更多详细信息,请参阅 答案。
快速概览:-
link 中的答案显示了在特定时间之后安排一些工作的不同方法。这个你可以根据自己的需求来使用。
据我从你的问题中了解到的,你可以有这样的 :-
if (mInterstitialAd!!.isLoaded) {
// show Progress Bar visibility here
Handler().postDelayed({
//Hide Progress Bar visibility here
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left,R.anim.nav_default_exit_anim)
}, 2000)
}
在您的 if (mInterstitialAd!!.isLoaded)
之后的这个方法中,您还可以有一个计时器(link 提供的更多详细信息),然后如果需要,您可以用动画展示您的广告。
我正在开发 Android 实现 Admob 插页式广告的应用程序。我想要的是处理程序锁定屏幕并显示进度条两秒钟,然后显示插页式广告。
我所做的是通过创建动画并在 InterstitialAd.show
方法之后调用它来为插页式广告设置动画。
mInterstitialAd!!.adListener = object: AdListener() {
override fun onAdLoaded() {
btnstart.setOnClickListener(View.OnClickListener {
if (mInterstitialAd!!.isLoaded) {
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
} else {
sharpref!!.privacyPolicyAccepted()
if (!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
} else {
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
})
}
代码为 overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
Interstiial 广告设置了动画,但我想要的是在 interstitail 广告打开前显示 Pogress 栏两秒钟。
Logcat 崩溃后
2020-12-04 10:29:03.603 577-1239/? E/PackageManager: liangshuang2, setEnabledSetting, packageName=com.google.android.apps.youtube.mango,,className=androidx.work.impl.background.systemjob.SystemJobService,,,newState=1,,flags=1,,userId=0,,callingPackage=null
2020-12-04 10:29:04.309 577-5614/? E/PackageManager: liangshuang2, setEnabledSetting, packageName=com.google.android.apps.youtube.mango,,className=androidx.work.impl.background.systemalarm.RescheduleReceiver,,,newState=1,,flags=1,,userId=0,,callingPackage=null
2020-12-04 10:35:56.218 22376-22565/? E/AndroidRuntime: FATAL EXCEPTION: Timer-0
Process: com.techpaliyal.bottomcutoutnavigation, PID: 22376
java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
at android.widget.Toast$TN.<init>(Toast.java:405)
at android.widget.Toast.<init>(Toast.java:117)
at android.widget.Toast.makeText(Toast.java:292)
at android.widget.Toast.makeText(Toast.java:282)
at
com.maximus.technologies.views.activities.SplashActivity$setClickListeners$onAdLoaded$$special$$inlined$timerTask.run(Timer.kt:149)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
2020-12-04 10:36:00.841 577-739/? E/UsbDeviceManager: unknown state HWDISCONNECTED
--------- beginning of main
2020-12-04 10:36:00.921 763-763/? E/licong: onReceive
2020-12-04 10:36:00.929 577-596/? E/BatteryExternalStatsWorker: no controller energy info supplied for wifi
2020-12-04 10:36:00.942 577-596/? E/BatteryExternalStatsWorker: no controller energy info supplied for bluetooth
2020-12-04 10:36:01.171 577-596/? E/BatteryExternalStatsWorker: no controller energy info supplied for wifi
更新代码
btnstart.setOnClickListener(View.OnClickListener {
mInterstitialAd!!.adListener = object: AdListener() {
override fun onAdLoaded() {
if (mInterstitialAd!!.isLoaded) {
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
} else {
sharpref!!.privacyPolicyAccepted()
if (!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
} else {
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
}
override fun onAdFailedToLoad(adError: LoadAdError) {
if (mInterstitialAd!!.isLoaded) {
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left, R.anim.nav_default_exit_anim)
} else {
sharpref!!.privacyPolicyAccepted()
if (!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
} else {
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
}
override fun onAdOpened() {}
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdLeftApplication() {
// Code to be executed when the user has left the app.
}
override fun onAdClosed() {
if(!sharpref!!.isFirstTimeLaunch()) {
val intent = Intent(applicationContext, SliderActivity::class.java)
startActivity(intent)
}
else
{
val intent = Intent(applicationContext, MainActivity::class.java)
startActivity(intent)
}
}
}
})
}
有关计时器的更多详细信息,请参阅
快速概览:-
link 中的答案显示了在特定时间之后安排一些工作的不同方法。这个你可以根据自己的需求来使用。
据我从你的问题中了解到的,你可以有这样的 :-
if (mInterstitialAd!!.isLoaded) {
// show Progress Bar visibility here
Handler().postDelayed({
//Hide Progress Bar visibility here
mInterstitialAd!!.show()
overridePendingTransition(R.anim.in_left,R.anim.nav_default_exit_anim)
}, 2000)
}
在您的 if (mInterstitialAd!!.isLoaded)
之后的这个方法中,您还可以有一个计时器(link 提供的更多详细信息),然后如果需要,您可以用动画展示您的广告。