示例广告加载完成

This commit is contained in:
ZhanGSKen
2025-11-16 09:53:58 +08:00
parent ac1858fba7
commit 398cb33a58
7 changed files with 269 additions and 214 deletions

View File

@@ -46,25 +46,10 @@ android {
}
}
// 允许使用系统隐藏API
lintOptions {
checkReleaseBuilds false
abortOnError false
// 米盟
packagingOptions {
doNotStrip "*/*/libmimo_1011.so"
}
// 针对PowerProfile的依赖配置
dependenciesInfo {
includeInApk = false
includeInBundle = false
}
buildFeatures {
dataBinding true
}
lintOptions {
abortOnError false
}
}
dependencies {

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun Nov 16 00:39:18 GMT 2025
#Sun Nov 16 01:52:06 GMT 2025
stageCount=0
libraryProject=
baseVersion=15.11
publishVersion=15.11.0
buildCount=2
buildCount=28
baseBetaVersion=15.11.1

View File

@@ -15,3 +15,6 @@
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
## 米盟
-keep class com.miui.zeus.** { *; }

View File

@@ -3,8 +3,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="cc.winboll.studio.powerbell">
//必要权限配置
//米盟必要权限配置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 权限会用在部分下载类广告安装应用时使用 -->
@@ -17,7 +17,7 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 米盟将通过此权限在Android 11系统上判定广告对应的应用是否在用户的app上安装避免投放错误的广告以此提高用户的广告体验。若添加此权限需要在您的用户隐私文档中声明 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过网络得到粗略位置 -->

View File

@@ -1,51 +1,32 @@
package cc.winboll.studio.powerbell;
import com.miui.zeus.mimo.sdk.MimoCustomController;
import com.miui.zeus.mimo.sdk.MimoLocation;
import com.miui.zeus.mimo.sdk.MimoSdk;
import com.miui.zeus.mimo.sdk.ADParams;
import com.miui.zeus.mimo.sdk.BannerAd;
import com.miui.zeus.mimo.sdk.base.BaseAd;
import com.google.android.material.navigation.NavigationView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import cc.winboll.studio.powerbell.utils.MimoUtils;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import cc.winboll.studio.libaes.views.AToolbar;
import androidx.appcompat.app.AlertDialog;
import cc.winboll.studio.libaes.views.ASupportToolbar;
import cc.winboll.studio.libappbase.LogActivity;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.powerbell.MainActivity;
@@ -57,44 +38,35 @@ import cc.winboll.studio.powerbell.activities.WinBoLLActivity;
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
import cc.winboll.studio.powerbell.fragments.MainViewFragment;
import cc.winboll.studio.powerbell.utils.BackgroundPictureUtils;
import cc.winboll.studio.powerbell.utils.MimoUtils;
import com.miui.zeus.mimo.sdk.ADParams;
import com.miui.zeus.mimo.sdk.BannerAd;
import com.miui.zeus.mimo.sdk.MimoCustomController;
import com.miui.zeus.mimo.sdk.MimoLocation;
import com.miui.zeus.mimo.sdk.MimoSdk;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import androidx.appcompat.app.AlertDialog;
import android.view.WindowManager;
import android.view.Window;
import android.view.Display;
import android.view.Gravity;
import android.content.DialogInterface;
import android.content.SharedPreferences;
public class MainActivity extends WinBoLLActivity {
public static final String TAG = "MainActivity";
private static final String PRIVACY_FILE = "privacy_pfs";
private static final String PRIVACY_VALUE = "privacy_value";//0: 拒绝1赞同
private SharedPreferences mSharedPreferences;
private static final String BANNER_POS_ID = "802e356f1726f9ff39c69308bfd6f06a";
private static final long BID_WIN_HIGHEST_LOSS_PRICE = 1;//最大竞败方出价
private static final long BID_LOSS_WIN_PRICE = 20000;//本次竞胜方出价
private String BANNER_POS_ID = "802e356f1726f9ff39c69308bfd6f06a";
private BannerAd mBannerAd;
private List<BannerAd> mAllBanners = new ArrayList<>();
private ViewGroup mContainer;
private Button mFetchBtn;
private Button mShowBtn;
private boolean mIsBiddingWin = true;
public static final int BACKGROUND_PICTURE_REQUEST_CODE = 0;
public static MainActivity _mMainActivity;
@@ -105,7 +77,7 @@ public class MainActivity extends WinBoLLActivity {
Menu mMenu;
Fragment mCurrentShowFragment;
MainViewFragment mMainViewFragment;
AToolbar mAToolbar;
Toolbar mToolbar;
@Override
public Activity getActivity() {
@@ -119,30 +91,14 @@ public class MainActivity extends WinBoLLActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//LogUtils.d(TAG, "onCreate(...)");
LogUtils.d(TAG, "onCreate(...)");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer = findViewById(R.id.ads_container);
// 米盟模块
showPrivacy();
mContainer = findViewById(R.id.container);
mFetchBtn = findViewById(R.id.fetchAd);
mShowBtn = findViewById(R.id.showAd);
mFetchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fetchAd();
}
});
mShowBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showAd();
}
});
// 设置调试日志
// mLogView = findViewById(R.id.logview);
@@ -155,10 +111,10 @@ public class MainActivity extends WinBoLLActivity {
//mAppConfigUtils = AppConfigUtils.getInstance(mApplication);
// 初始化工具栏
mAToolbar = (AToolbar) findViewById(R.id.toolbar);
setActionBar(mAToolbar);
mToolbar = findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
//mAToolbar.setSubtitle("Main");
mAToolbar.setTitleTextAppearance(this, R.style.Toolbar_TitleText);
mToolbar.setTitleTextAppearance(this, R.style.Toolbar_TitleText);
if (mMainViewFragment == null) {
FragmentTransaction tx = getFragmentManager().beginTransaction();
@@ -171,22 +127,158 @@ public class MainActivity extends WinBoLLActivity {
// NotificationHelper notificationUtils = new NotificationHelper(this);
// notificationUtils.createNotificationChannels();
LogUtils.d(TAG, "ads start");
new Thread(new Runnable(){
@Override
public void run() {
LogUtils.d(TAG, "run() 1");
runOnUiThread(new Runnable(){
@Override
public void run() {
LogUtils.d(TAG, "run() 2");
try {
Thread.sleep(1000);
fetchAd();
} catch (InterruptedException e) {}
}
});
}
}).start();
}
// public void onADs(View view) {
// LogUtils.d(TAG, "onPostCreate");
// fetchAd();
//
// }
/*public void showADs() {
//(5.3.4新增接口) 请使用最新接口集成
ADParams params = new ADParams.Builder().setUpId(BANNER_POS_ID).build();
bannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
//请求成功回调
@Override
public void onBannerAdLoadSuccess() {
}
//请求失败回调
@Override
public void onAdLoadFailed (int errorCode, String errorMsg) {
}
});
////废弃 将会在后面版本删除
// @Deprecated
// bannerAd.loadAd(upId, new BannerAd.BannerLoadListener() {
// //请求成功回调
// @Override
// public void onBannerAdLoadSuccess() {
// }
// //请求失败回调
// @Override
// public void onAdLoadFailed (int errorCode, String errorMsg) {
// }
// });
bannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
@Override
public void onDownloadStarted() {
//开始下载
LogUtils.d(TAG, "ads 开始下载");
}
@Override
public void onDownloadProgressUpdated(int progress) {
//下载进度,例如:${progress}%
LogUtils.d(TAG, String.format("ads 下载进度 %d", progress));
}
@Override
public void onDownloadPaused() {
//下载暂停
LogUtils.d(TAG, "ads 下载暂停");
}
@Override
public void onDownloadCancel() {
//取消下载
LogUtils.d(TAG, "ads 取消下载");
}
@Override
public void onDownloadFailed(int errorCode) {
//下载失败, 若需要了解errorCode具体含义请咨询米盟
LogUtils.d(TAG, String.format("ads 下载失败。errorCode %d", errorCode));
}
@Override
public void onDownloadFinished() {
//下载结束
LogUtils.d(TAG, "ads 下载结束");
}
@Override
public void onInstallStart() {
//开始安装
LogUtils.d(TAG, "ads 开始安装");
}
@Override
public void onInstallFailed(int errorCode) {
//安装失败
LogUtils.d(TAG, "ads 安装失败");
}
@Override
public void onInstallSuccess() {
//安装成功
LogUtils.d(TAG, "ads 安装成功");
}
});
LinearLayout ads_container = findViewById(R.id.ads_container);
bannerAd.showAd(this, ads_container, new BannerAd.BannerInteractionListener() {
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdShow() {
// 广告被展示
}
@Override
public void onAdDismiss() {
// 点击关闭按钮广告消失回调
}
@Override
public void onRenderSuccess() {
// 广告渲染成功
}
@Override
public void onRenderFail(int code, String msg) {
// 广告渲染失败
}
});
}*/
@Override
protected void onDestroy() {
super.onDestroy();
try {
for(BannerAd ad: mAllBanners){
ad.destroy();
}
} catch (Exception e) {
e.printStackTrace();
}
//bannerAd.destroy();
}
void showFragment(Fragment fragment) {
FragmentTransaction tx = getFragmentManager().beginTransaction();
@@ -320,146 +412,149 @@ public class MainActivity extends WinBoLLActivity {
RelativeLayout mainLayout = findViewById(R.id.activitymainRelativeLayout1);
mainLayout.setBackgroundColor(nPixelColor);
}
private void showAd() {
final FrameLayout container = new FrameLayout(this);
container.setPadding(0, 0, 0, MimoUtils.dpToPx(this, 10));
mContainer.addView(container, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
if (mIsBiddingWin){
//如果竞价成功,传⼊本次实际结算价
mBannerAd.setPrice(getPrice());
}
mBannerAd.showAd(this, container, new BannerAd.BannerInteractionListener() {
private void showAd() {
LogUtils.d(TAG, "showAd()");
final FrameLayout container = new FrameLayout(this);
container.setPadding(0, 0, 0, MimoUtils.dpToPx(this, 10));
mContainer.addView(container, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
if (mIsBiddingWin) {
//如果竞价成功,传⼊本次实际结算价
//mBannerAd.setPrice(getPrice());
}
mBannerAd.showAd(this, container, new BannerAd.BannerInteractionListener() {
@Override
public void onAdClick() {
Log.d(TAG, "onAdClick");
LogUtils.d(TAG, "onAdClick");
}
@Override
public void onAdShow() {
mShowBtn.setEnabled(false);
Log.d(TAG, "onAdShow");
//mShowBtn.setEnabled(false);
LogUtils.d(TAG, "onAdShow");
}
@Override
public void onAdDismiss() {
Log.d(TAG, "onAdDismiss");
LogUtils.d(TAG, "onAdDismiss");
mContainer.removeView(container);
}
@Override
public void onRenderSuccess() {
Log.d(TAG, "onRenderSuccess");
LogUtils.d(TAG, "onRenderSuccess");
}
@Override
public void onRenderFail(int code, String msg) {
Log.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
LogUtils.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
}
});
}
}
private void fetchAd() {
mShowBtn.setEnabled(false);
mBannerAd = new BannerAd();
mAllBanners.add(mBannerAd);
mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
private void fetchAd() {
LogUtils.d(TAG, "fetchAd()");
mBannerAd = new BannerAd();
mAllBanners.add(mBannerAd);
mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
@Override
public void onDownloadStarted() {
Log.e(TAG, "onDownloadStarted");
LogUtils.d(TAG, "onDownloadStarted");
}
@Override
public void onDownloadPaused() {
Log.e(TAG, "onDownloadPaused");
LogUtils.d(TAG, "onDownloadPaused");
}
@Override
public void onDownloadFailed(int errorCode) {
Log.e(TAG, "onDownloadFailed, errorCode = "+ errorCode);
LogUtils.d(TAG, "onDownloadFailed, errorCode = " + errorCode);
}
@Override
public void onDownloadFinished() {
Log.e(TAG, "onDownloadFinished");
LogUtils.d(TAG, "onDownloadFinished");
}
@Override
public void onDownloadProgressUpdated(int progress) {
Log.e(TAG, "onDownloadProgressUpdated "+ progress + "%");
LogUtils.d(TAG, "onDownloadProgressUpdated " + progress + "%");
}
@Override
public void onInstallFailed(int errorCode) {
Log.e(TAG, "onInstallFailed, errorCode = "+ errorCode);
LogUtils.d(TAG, "onInstallFailed, errorCode = " + errorCode);
}
@Override
public void onInstallStart() {
Log.e(TAG, "onInstallStart");
LogUtils.d(TAG, "onInstallStart");
}
@Override
public void onInstallSuccess() {
Log.e(TAG, "onInstallSuccess");
LogUtils.d(TAG, "onInstallSuccess");
}
@Override
public void onDownloadCancel() {
Log.e(TAG, "onDownloadCancel");
LogUtils.d(TAG, "onDownloadCancel");
}
});
ADParams params = new ADParams.Builder().setUpId(BANNER_POS_ID).build();
mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
ADParams params = new ADParams.Builder().setUpId(BANNER_POS_ID).build();
mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
@Override
public void onBannerAdLoadSuccess() {
mShowBtn.setEnabled(true);
LogUtils.d(TAG, "onBannerAdLoadSuccess()");
showAd();
//mShowBtn.setEnabled(true);
long bannerPrice = getPrice();
if (mIsBiddingWin){
//竞价成功时候上报win
Map<String, Long> auctionBidInfo = new HashMap<>();
auctionBidInfo.put(BaseAd.IBidding.EXPECT_COST_PRICE, bannerPrice);
auctionBidInfo.put(BaseAd.IBidding.HIGHEST_LOSS_PRICE, BID_WIN_HIGHEST_LOSS_PRICE);
mBannerAd.win(auctionBidInfo);
} else {
//竞价失败的时候上报loss
Map<String, Object> lossReasonInfo = new HashMap<>();
lossReasonInfo.put(BaseAd.IBidding.WIN_PRICE, BID_LOSS_WIN_PRICE);
lossReasonInfo.put(BaseAd.IBidding.LOSS_REASON, BaseAd.LossReason.TYPE_LOWER_OTHER_BIDDER_PRICE);
lossReasonInfo.put(BaseAd.IBidding.ADN_ID, 1);
mBannerAd.loss(lossReasonInfo);
}
/*long bannerPrice = getPrice();
if (mIsBiddingWin) {
//竞价成功时候上报win
Map<String, Long> auctionBidInfo = new HashMap<>();
auctionBidInfo.put(BaseAd.IBidding.EXPECT_COST_PRICE, bannerPrice);
auctionBidInfo.put(BaseAd.IBidding.HIGHEST_LOSS_PRICE, BID_WIN_HIGHEST_LOSS_PRICE);
mBannerAd.win(auctionBidInfo);
} else {
//竞价失败的时候上报loss
Map<String, Object> lossReasonInfo = new HashMap<>();
lossReasonInfo.put(BaseAd.IBidding.WIN_PRICE, BID_LOSS_WIN_PRICE);
lossReasonInfo.put(BaseAd.IBidding.LOSS_REASON, BaseAd.LossReason.TYPE_LOWER_OTHER_BIDDER_PRICE);
lossReasonInfo.put(BaseAd.IBidding.ADN_ID, 1);
mBannerAd.loss(lossReasonInfo);
}*/
}
@Override
public void onAdLoadFailed(int errorCode, String errorMsg) {
Log.e(TAG, "errorCode = " + errorCode + ", errorMsg = " + errorMsg);
LogUtils.d(TAG, "errorCode = " + errorCode + ", errorMsg = " + errorMsg);
}
});
}
private long getPrice(){
if (mBannerAd == null){
return 0;
}
Map<String, Object> map = mBannerAd.getMediaExtraInfo();
if (map == null || map.isEmpty()){
return 0;
}
return (long) map.get("price");
}
private void showPrivacy(){
}
// private long getPrice() {
// if (mBannerAd == null) {
// return 0;
// }
// Map<String, Object> map = mBannerAd.getMediaExtraInfo();
// if (map == null || map.isEmpty()) {
// return 0;
// }
// return (long) map.get("price");
// }
private void showPrivacy() {
String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
if (TextUtils.equals(privacyAgreeValue, String.valueOf(0))){
if (TextUtils.equals(privacyAgreeValue, String.valueOf(0))) {
Log.i(TAG, "已拒绝隐私协议,广告已处于不可以状态...");
Toast.makeText(this, "已拒绝隐私协议,广告已处于不可以状态", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))){
if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
Log.i(TAG, "已同意隐私协议,开始初始化...");
initMimoSdk();
return;
@@ -557,7 +652,7 @@ public class MainActivity extends WinBoLLActivity {
}
public SharedPreferences getSharedPreferences() {
if (mSharedPreferences == null){
if (mSharedPreferences == null) {
mSharedPreferences = getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
}
return mSharedPreferences;

View File

@@ -73,13 +73,13 @@ public abstract class WinBoLLActivity extends AppCompatActivity implements IWinB
}
public void setupToolbar() {
// mToolbar = findViewById(R.id.toolbar);
// if (mToolbar != null) {
// setSupportActionBar(mToolbar);
// if (getSupportActionBar() != null) {
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// }
// }
Toolbar mToolbar = findViewById(R.id.toolbar);
if (mToolbar != null) {
setSupportActionBar(mToolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
}
@Override

View File

@@ -6,7 +6,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
<cc.winboll.studio.libaes.views.AToolbar
<cc.winboll.studio.libaes.views.ASupportToolbar
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
android:id="@+id/toolbar"
@@ -32,43 +32,15 @@
</RelativeLayout>
<LinearLayout
android:orientation="horizontal"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0">
android:layout_height="wrap_content">
<Button
android:id="@+id/fetchAd"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="10dp"
android:background="@android:color/white"
android:text="获取广告"/>
<Button
android:id="@+id/showAd"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="10dp"
android:background="@android:color/white"
android:enabled="false"
android:text="展示广告"/>
<ScrollView
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/fetchAd"
android:layout_marginTop="10dp"
android:overScrollMode="never"
android:scrollbars="none">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</ScrollView>
android:orientation="vertical"/>
</LinearLayout>