Commit 4dda6061 authored by wanglei's avatar wanglei

白包接开屏广告和原生高级广告

parent 2bf975b2
......@@ -3,7 +3,20 @@
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
<State />
<State>
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="adb-3426369207001D6-FYisxI._adb-tls-connect._tcp" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-03-27T10:49:46.632111500Z" />
</State>
</entry>
</value>
</component>
......
......@@ -28,6 +28,11 @@
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713" />
<!-- 广告验证器 -->
<meta-data
android:name="com.google.android.gms.ads.flag.NATIVE_AD_DEBUGGER_ENABLED"
android:value="false" />
<activity
android:name=".kokoInternalstorage.KoInternalkoActivity"
......@@ -52,6 +57,7 @@
<activity
android:name=".KokoLaunchActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
<intent-filter>
......@@ -63,6 +69,7 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
......
package com.zxhy.fastfilemanagerpro
import android.annotation.SuppressLint
import android.app.ActivityManager
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
......@@ -16,6 +18,7 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.concurrent.atomic.AtomicBoolean
@SuppressLint("CustomSplashScreen")
class KokoLaunchActivity : AppCompatActivity() {
......@@ -36,8 +39,8 @@ class KokoLaunchActivity : AppCompatActivity() {
(application as MyApplication).kokoOpenAdManager.adShowComplete = { showed ->
if (showed) {
startActivity(Intent(this@KokoLaunchActivity, MainActivity::class.java))
finish()
printTaskActivity()
startActivity(Intent(this, MainActivity::class.java))
} else {
lifecycleScope.launch(Dispatchers.Main) {
while (binding.ProgressBar.progress != 100) {
......@@ -83,8 +86,20 @@ class KokoLaunchActivity : AppCompatActivity() {
if (isAdsInitializeCalled.getAndSet(true)) {
return
}
MobileAds.initialize(this) {}
MobileAds.initialize(this) {
(application as MyApplication).kokoOpenAdManager.isInit = true
}
(application as MyApplication).loadAd(this)
}
fun printTaskActivity() {
val activityManager = getSystemService(ACTIVITY_SERVICE) as ActivityManager
val runningTasks = activityManager.getRunningTasks(10)
for (taskInfo in runningTasks) {
val componentName = taskInfo.topActivity
val activityName = componentName!!.className
Log.e("Activity", "Task Activity Name: $activityName")
}
}
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.MenuItem
import android.view.View
......@@ -13,8 +14,16 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdLoader
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.VideoController
import com.google.android.gms.ads.VideoOptions
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.gms.ads.nativead.NativeAdOptions
import com.google.android.material.navigation.NavigationBarView
import com.zxhy.fastfilemanagerpro.databinding.ActivityMainBinding
import com.zxhy.fastfilemanagerpro.databinding.AdNativeAdvanceBinding
import com.zxhy.fastfilemanagerpro.kokotools.ActivityLauncher
import com.zxhy.fastfilemanagerpro.kokotools.permission.PermissionCheck.storePermissionCheck
import com.zxhy.fastfilemanagerpro.kokotools.permission.StorePermissionEx.requestStoreFollow
......@@ -22,6 +31,7 @@ import com.zxhy.fastfilemanagerpro.kokotools.permission.StorePermissionEx.reques
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var activityLauncher: ActivityLauncher
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
......@@ -103,4 +113,10 @@ class MainActivity : AppCompatActivity() {
// color_b3000000 权限窗口颜色
window.statusBarColor = ContextCompat.getColor(this, colorRes)
}
companion object {
const val ADMOB_AD_UNIT_ID = "ca-app-pub-3940256099942544/2247696110"
}
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro.kokoads
import android.app.Activity
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdLoader
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.VideoController
import com.google.android.gms.ads.VideoOptions
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.gms.ads.nativead.NativeAdOptions
import com.google.android.gms.ads.nativead.NativeAdView
import com.zxhy.fastfilemanagerpro.databinding.AdNativeAdvanceBinding
object AdNativeAdvanceEx {
fun refreshAd(
activity: Activity,
flAd: FrameLayout,
admobAdUnitId: String,
actionNativeAd: ((nativeAd: NativeAd) -> Unit)? = null,
) {
activity.apply {
val builder = AdLoader.Builder(this, admobAdUnitId)
builder.forNativeAd { nativeAd ->
val activityDestroyed = isDestroyed
if (activityDestroyed || isFinishing || isChangingConfigurations) {
nativeAd.destroy()
return@forNativeAd
}
actionNativeAd?.invoke(nativeAd)
flAd.removeAllViews()
flAd.addView(bindAdNativeAdView(nativeAd, activity.layoutInflater))
}
//静音视频
val videoOptions =
VideoOptions.Builder().setStartMuted(true).build()
val adOptions = NativeAdOptions.Builder().setVideoOptions(videoOptions).build()
builder.withNativeAdOptions(adOptions)
val adLoader = builder.withAdListener(object : AdListener() {}).build()
adLoader.loadAd(AdRequest.Builder().build())
}
}
fun bindAdNativeAdView(
nativeAd: NativeAd,
layoutInflater: LayoutInflater
): NativeAdView {
val adNativeAdvanceBinding = AdNativeAdvanceBinding.inflate(layoutInflater)
adNativeAdvanceBinding.apply {
val nativeAdView = root
nativeAdView.mediaView = adMedia
nativeAdView.headlineView = adHeadline
nativeAdView.bodyView = adBody
nativeAdView.callToActionView = adCallToAction
nativeAdView.iconView = adAppIcon
nativeAdView.priceView = adPrice
nativeAdView.starRatingView = adStars
nativeAdView.storeView = adStore
nativeAdView.advertiserView = adAdvertiser
adHeadline.text = nativeAd.headline
nativeAd.mediaContent?.let { adMedia.mediaContent = it }
if (nativeAd.body == null) {
adBody.visibility = View.INVISIBLE
} else {
adBody.visibility = View.VISIBLE
adBody.text = nativeAd.body
}
if (nativeAd.callToAction == null) {
adCallToAction.visibility = View.INVISIBLE
} else {
adCallToAction.visibility = View.VISIBLE
adCallToAction.text = nativeAd.callToAction
}
if (nativeAd.icon == null) {
adAppIcon.visibility = View.GONE
} else {
adAppIcon.setImageDrawable(nativeAd.icon?.drawable)
adAppIcon.visibility = View.VISIBLE
}
if (nativeAd.price == null) {
adPrice.visibility = View.INVISIBLE
} else {
adPrice.visibility = View.VISIBLE
adPrice.text = nativeAd.price
}
if (nativeAd.store == null) {
adStore.visibility = View.INVISIBLE
} else {
adStore.visibility = View.VISIBLE
adStore.text = nativeAd.store
}
if (nativeAd.starRating == null) {
adStars.visibility = View.INVISIBLE
} else {
adStars.rating = nativeAd.starRating!!.toFloat()
adStars.visibility = View.VISIBLE
}
if (nativeAd.advertiser == null) {
adAdvertiser.visibility = View.INVISIBLE
} else {
adAdvertiser.text = nativeAd.advertiser
adAdvertiser.visibility = View.VISIBLE
}
nativeAdView.setNativeAd(nativeAd)
}
val mediaContent = nativeAd.mediaContent
val vc = mediaContent?.videoController
if (vc != null && mediaContent.hasVideoContent()) {
vc.videoLifecycleCallbacks =
object : VideoController.VideoLifecycleCallbacks() {
override fun onVideoEnd() {
super.onVideoEnd()
}
}
}
return adNativeAdvanceBinding.root
}
}
\ No newline at end of file
......@@ -16,6 +16,7 @@ class KokoOpenAdManager {
private var googleMobileAdsConsentManager: GoogleMobileAdsConsentManager =
GoogleMobileAdsConsentManager.getInstance(MyApplication.ApplicationContext)
var isInit = false
private var appOpenAd: AppOpenAd? = null
private var isLoadingAd = false
private var isShowingAd = false
......
......@@ -23,6 +23,7 @@ data class KoFileDatako(
fun KoFileDatako.loadImageIcon(context: Context, imageView: ImageView) {
when {
isEmpty() -> imageView.setImageResource(R.mipmap.qwe_889989111)
isImage() or isVideo() -> imageView.loadImageView(context, toFile())
isAudio() -> imageView.setImageResource(R.mipmap.zd_8871110)
isLog() -> imageView.setImageResource(R.mipmap.zd_001123)
......@@ -34,6 +35,10 @@ data class KoFileDatako(
}
}
fun KoFileDatako.isEmpty(): Boolean {
return toFile().length() == 0L
}
fun KoFileDatako.isImage(): Boolean {
return name.contains(".jpg") or name.contains(".png") or name.contains(".gif")
}
......
......@@ -64,6 +64,9 @@ class KoDupFilekoActivity : AppCompatActivity() {
} else {
showPermissionSet(true)
}
binding.ivBack.setOnClickListener {
finish()
}
}
......
......@@ -8,9 +8,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.google.android.gms.ads.nativead.NativeAd
import com.zxhy.fastfilemanagerpro.MainActivity.Companion.ADMOB_AD_UNIT_ID
import com.zxhy.fastfilemanagerpro.R
import com.zxhy.fastfilemanagerpro.databinding.FragmentKoHomekoBinding
import com.zxhy.fastfilemanagerpro.kokoInternalstorage.KoInternalkoActivity
import com.zxhy.fastfilemanagerpro.kokoads.AdNativeAdvanceEx.refreshAd
import com.zxhy.fastfilemanagerpro.kokodup.KoDupFilekoActivity.Companion.DUP_FILE
import com.zxhy.fastfilemanagerpro.kokodup.KoDupFilekoActivity.Companion.DUP_IMAGE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.EMPTY_FILE
......@@ -21,6 +24,9 @@ class KoHomekoFragment : Fragment() {
private lateinit var binding: FragmentKoHomekoBinding
private lateinit var context: Context
private var currentNativeAd: NativeAd? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
......@@ -73,7 +79,20 @@ class KoHomekoFragment : Fragment() {
binding.flStorage.setOnClickListener {
startActivity(Intent(context, KoInternalkoActivity::class.java))
}
refreshAd(requireActivity(), binding.flAd, ADMOB_AD_UNIT_ID) {
currentNativeAd?.destroy()
currentNativeAd = it
}
}
override fun onStop() {
super.onStop()
}
override fun onDestroyView() {
super.onDestroyView()
currentNativeAd?.destroy()
}
}
\ No newline at end of file
......@@ -9,8 +9,11 @@ import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.google.android.gms.ads.nativead.NativeAd
import com.zxhy.fastfilemanagerpro.MainActivity
import com.zxhy.fastfilemanagerpro.R
import com.zxhy.fastfilemanagerpro.databinding.FragmentKoManagerkoBinding
import com.zxhy.fastfilemanagerpro.kokoads.AdNativeAdvanceEx
import com.zxhy.fastfilemanagerpro.kokogridfile.KoGridFilekoActivity.Companion.IMAGE_FILE
import com.zxhy.fastfilemanagerpro.kokogridfile.KoGridFilekoActivity.Companion.VIDEO_FILE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.APK_FILE
......@@ -27,6 +30,7 @@ class KoManagerkoFragment : Fragment() {
private val viewModel: KoManagerkoViewModel by viewModels()
private lateinit var context: Context
private lateinit var adapter: KoRecentkoAdapter
private var currentNativeAd: NativeAd? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -94,6 +98,24 @@ class KoManagerkoFragment : Fragment() {
adapter.setData(it)
}
}
AdNativeAdvanceEx.refreshAd(
requireActivity(),
binding.flAd,
MainActivity.ADMOB_AD_UNIT_ID
) {
currentNativeAd?.destroy()
currentNativeAd = it
}
}
override fun onResume() {
super.onResume()
}
override fun onDestroyView() {
super.onDestroyView()
currentNativeAd?.destroy()
}
}
\ No newline at end of file
......@@ -22,6 +22,7 @@
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/iv_back"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
......
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#FFFFFF"
android:minHeight="50dp"
android:orientation="vertical">
<!-- head内容 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:adjustViewBounds="true"
android:paddingEnd="5dp"
android:paddingBottom="5dp"
tools:ignore="ContentDescription,RtlSymmetry" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#0000FF"
android:textSize="16sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/ad_advertiser"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
android:textSize="14sp"
android:textStyle="bold" />
<RatingBar
android:id="@+id/ad_stars"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="true"
android:numStars="5"
android:stepSize="0.5" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!-- body内容 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:textSize="12sp" />
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:minHeight="100dp"
android:maxHeight="150dp" />
<LinearLayout
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:orientation="horizontal">
<TextView
android:id="@+id/ad_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="5dp"
android:paddingLeft="5dp"
android:paddingEnd="5dp"
android:paddingRight="5dp"
android:textSize="12sp" />
<TextView
android:id="@+id/ad_store"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="5dp"
android:paddingLeft="5dp"
android:paddingEnd="5dp"
android:paddingRight="5dp"
android:textSize="12sp" />
<Button
android:id="@+id/ad_call_to_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
\ No newline at end of file
......@@ -380,8 +380,10 @@
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:id="@+id/fl_ad"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
......@@ -390,11 +392,6 @@
app:layout_constraintTop_toBottomOf="@id/ll_2"
tools:ignore="UselessLeaf">
<ImageView
android:layout_width="match_parent"
android:layout_height="140dp"
android:src="@mipmap/a_87890001"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment