Compare commits

...

3 Commits

Author SHA1 Message Date
b1bf37b859 <powerbell>APK 15.11.2 release Publish. 2025-11-18 17:03:32 +08:00
ZhanGSKen
93891313b3 添加AES项目的米盟模块控件。 2025-11-18 17:00:53 +08:00
ZhanGSKen
2db3f2b872 移除应用内自定义米盟模块 2025-11-18 16:50:06 +08:00
4 changed files with 413 additions and 412 deletions

View File

@@ -99,7 +99,7 @@ dependencies {
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
//api 'androidx.fragment:fragment:1.1.0'
implementation 'cc.winboll.studio:libaes:15.11.0'
implementation 'cc.winboll.studio:libaes:15.11.1'
implementation 'cc.winboll.studio:libappbase:15.11.0'
//api fileTree(dir: 'libs', include: ['*.aar'])

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun Nov 16 14:00:04 HKT 2025
stageCount=2
#Tue Nov 18 17:03:32 HKT 2025
stageCount=3
libraryProject=
baseVersion=15.11
publishVersion=15.11.1
publishVersion=15.11.2
buildCount=0
baseBetaVersion=15.11.2
baseBetaVersion=15.11.3

View File

@@ -47,6 +47,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import cc.winboll.studio.powerbell.activities.WinBoLLActivity;
import cc.winboll.studio.libaes.views.ADsBannerView;
/**
* 主活动类修复小米广告SDK空Context崩溃问题
@@ -60,23 +61,23 @@ 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 static final String PRIVACY_FILE = "privacy_pfs";
// private static final String PRIVACY_VALUE = "privacy_value";//0: 拒绝1赞同
//
// private SharedPreferences mSharedPreferences;
//
// private String BANNER_POS_ID = "802e356f1726f9ff39c69308bfd6f06a";
// private String BANNER_POS_ID_WINBOLL_BETA = "d129ee5a263911f981a6dc7a9802e3e7";
// private String BANNER_POS_ID_WINBOLL = "4ec30efdb32271765b9a4efac902828b";
private SharedPreferences mSharedPreferences;
private String BANNER_POS_ID = "802e356f1726f9ff39c69308bfd6f06a";
private String BANNER_POS_ID_WINBOLL_BETA = "d129ee5a263911f981a6dc7a9802e3e7";
private String BANNER_POS_ID_WINBOLL = "4ec30efdb32271765b9a4efac902828b";
private BannerAd mBannerAd;
private List<BannerAd> mAllBanners = new ArrayList<>();
private ViewGroup mContainer;
private boolean mIsBiddingWin = true;
public static final int BACKGROUND_PICTURE_REQUEST_CODE = 0;
// private BannerAd mBannerAd;
// private List<BannerAd> mAllBanners = new ArrayList<>();
//
// private ViewGroup mContainer;
//
// private boolean mIsBiddingWin = true;
//
// public static final int BACKGROUND_PICTURE_REQUEST_CODE = 0;
public static MainActivity _mMainActivity;
private App mApplication;
@@ -85,7 +86,8 @@ public class MainActivity extends WinBoLLActivity {
private MainViewFragment mMainViewFragment;
private Toolbar mToolbar;
// 新增主线程Handler确保广告操作在主线程执行
private Handler mMainHandler;
//private Handler mMainHandler;
ADsBannerView mADsBannerView;
@Override
public Activity getActivity() {
@@ -102,13 +104,15 @@ public class MainActivity extends WinBoLLActivity {
LogUtils.d(TAG, "onCreate(...)");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer = findViewById(R.id.ads_container);
// 初始化主线程Handler关键确保广告操作在主线程执行
mMainHandler = new Handler(Looper.getMainLooper());
// 米盟模块:隐私协议弹窗
showPrivacy();
mADsBannerView = findViewById(R.id.adsbanner);
// mContainer = findViewById(R.id.ads_container);
//
// // 初始化主线程Handler关键确保广告操作在主线程执行
// mMainHandler = new Handler(Looper.getMainLooper());
//
// // 米盟模块:隐私协议弹窗
// showPrivacy();
_mMainActivity = this;
mApplication = (App) getApplication();
@@ -131,37 +135,40 @@ public class MainActivity extends WinBoLLActivity {
@Override
protected void onDestroy() {
super.onDestroy();
// 修复:释放广告资源,避免内存泄漏
releaseAdResources();
// // 修复:释放广告资源,避免内存泄漏
// releaseAdResources();
// 置空静态引用,避免内存泄漏
_mMainActivity = null;
// 移除Handler回调
if (mMainHandler != null) {
mMainHandler.removeCallbacksAndMessages(null);
}
}
/**
* 释放广告资源关键避免内存泄漏和空Context调用
*/
private void releaseAdResources() {
LogUtils.d(TAG, "releaseAdResources()");
// 销毁所有广告实例
if (mAllBanners != null && !mAllBanners.isEmpty()) {
for (BannerAd ad : mAllBanners) {
if (ad != null) {
ad.destroy();
}
}
mAllBanners.clear();
}
// 置空当前广告引用
mBannerAd = null;
// 移除广告容器中的视图
if (mContainer != null) {
mContainer.removeAllViews();
}
// // 移除Handler回调
// if (mMainHandler != null) {
// mMainHandler.removeCallbacksAndMessages(null);
// }
if(mADsBannerView != null) {
mADsBannerView.releaseAdResources();
}
}
//
// /**
// * 释放广告资源关键避免内存泄漏和空Context调用
// */
// private void releaseAdResources() {
// LogUtils.d(TAG, "releaseAdResources()");
// // 销毁所有广告实例
// if (mAllBanners != null && !mAllBanners.isEmpty()) {
// for (BannerAd ad : mAllBanners) {
// if (ad != null) {
// ad.destroy();
// }
// }
// mAllBanners.clear();
// }
// // 置空当前广告引用
// mBannerAd = null;
// // 移除广告容器中的视图
// if (mContainer != null) {
// mContainer.removeAllViews();
// }
// }
void showFragment(Fragment fragment) {
FragmentTransaction tx = getFragmentManager().beginTransaction();
@@ -211,24 +218,27 @@ public class MainActivity extends WinBoLLActivity {
super.onResume();
reloadBackground();
setBackgroundColor();
if(mADsBannerView != null) {
mADsBannerView.resumeADs();
}
// 修复:优化广告请求逻辑(添加生命周期判断 + 主线程执行)
if (!isFinishing() && !isDestroyed()) {
String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
LogUtils.i(TAG, "已同意隐私协议,开始播放米盟广告...");
mMainHandler.postDelayed(new Runnable() {
@Override
public void run() {
// 再次校验生命周期避免延迟执行时Activity已销毁
if (!isFinishing() && !isDestroyed()) {
fetchAd();
}
}
}, 1000); // 延迟1秒请求广告提升页面加载体验
}
}
// // 修复:优化广告请求逻辑(添加生命周期判断 + 主线程执行)
// if (!isFinishing() && !isDestroyed()) {
// String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
// if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
// LogUtils.i(TAG, "已同意隐私协议,开始播放米盟广告...");
// mMainHandler.postDelayed(new Runnable() {
// @Override
// public void run() {
// // 再次校验生命周期避免延迟执行时Activity已销毁
// if (!isFinishing() && !isDestroyed()) {
// fetchAd();
// }
// }
// }, 1000); // 延迟1秒请求广告提升页面加载体验
// }
//
// }
}
@Override
@@ -259,15 +269,15 @@ public class MainActivity extends WinBoLLActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == BACKGROUND_PICTURE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_SHORT).show();
}
} else {
String sz = "Unsolved requestCode = " + Integer.toString(requestCode);
Toast.makeText(getApplicationContext(), sz, Toast.LENGTH_SHORT).show();
LogUtils.d(TAG, sz);
}
// if (requestCode == BACKGROUND_PICTURE_REQUEST_CODE) {
// if (resultCode == RESULT_OK) {
// Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_SHORT).show();
// }
// } else {
// String sz = "Unsolved requestCode = " + Integer.toString(requestCode);
// Toast.makeText(getApplicationContext(), sz, Toast.LENGTH_SHORT).show();
// LogUtils.d(TAG, sz);
// }
}
@Override
@@ -292,306 +302,306 @@ public class MainActivity extends WinBoLLActivity {
mainLayout.setBackgroundColor(nPixelColor);
}
}
/**
* 显示广告核心修复传递安全的Context + 生命周期校验)
*/
private void showAd() {
LogUtils.d(TAG, "showAd()");
// 1. 生命周期校验避免Activity已销毁时操作UI
if (isFinishing() || isDestroyed()) {
LogUtils.e(TAG, "showAd: Activity is finishing or destroyed");
return;
}
// 2. 非空校验:广告实例和容器
if (mBannerAd == null || mContainer == null) {
LogUtils.e(TAG, "showAd: BannerAd or Container is null");
return;
}
// 3. 创建广告容器使用ApplicationContext避免内存泄漏
final FrameLayout container = new FrameLayout(getApplicationContext());
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());
}
// 4. 显示广告传递ApplicationContext避免Activity Context失效
mBannerAd.showAd(MainActivity.this, container, new BannerAd.BannerInteractionListener() {
@Override
public void onAdClick() {
LogUtils.d(TAG, "onAdClick");
}
@Override
public void onAdShow() {
LogUtils.d(TAG, "onAdShow");
}
@Override
public void onAdDismiss() {
LogUtils.d(TAG, "onAdDismiss");
// 修复移除容器时校验Activity状态
if (!isFinishing() && !isDestroyed() && mContainer != null) {
mContainer.removeView(container);
}
}
@Override
public void onRenderSuccess() {
LogUtils.d(TAG, "onRenderSuccess");
}
@Override
public void onRenderFail(int code, String msg) {
LogUtils.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
// 修复:渲染失败时移除容器
if (!isFinishing() && !isDestroyed() && mContainer != null) {
mContainer.removeView(container);
}
}
});
}
/**
* 请求广告核心修复Context安全校验 + 异常捕获 + 资源管理)
*/
private void fetchAd() {
LogUtils.d(TAG, "fetchAd()");
// 1. 双重校验Activity未销毁 + Context非空
if (isFinishing() || isDestroyed() || getApplicationContext() == null) {
LogUtils.e(TAG, "fetchAd: Invalid Context or Activity state");
return;
}
// 2. 释放之前的广告资源,避免内存泄漏
if (mBannerAd != null) {
mBannerAd.destroy();
}
// 3. 初始化广告使用ApplicationContext避免Activity Context失效
try {
mBannerAd = new BannerAd();
mAllBanners.add(mBannerAd);
} catch (Exception e) {
LogUtils.e(TAG, "fetchAd: Init BannerAd failed", e);
return;
}
// 4. 设置下载监听
mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
@Override
public void onDownloadStarted() {
LogUtils.d(TAG, "onDownloadStarted");
}
@Override
public void onDownloadPaused() {
LogUtils.d(TAG, "onDownloadPaused");
}
@Override
public void onDownloadFailed(int errorCode) {
LogUtils.d(TAG, "onDownloadFailed, errorCode = " + errorCode);
}
@Override
public void onDownloadFinished() {
LogUtils.d(TAG, "onDownloadFinished");
}
@Override
public void onDownloadProgressUpdated(int progress) {
LogUtils.d(TAG, "onDownloadProgressUpdated " + progress + "%");
}
@Override
public void onInstallFailed(int errorCode) {
LogUtils.d(TAG, "onInstallFailed, errorCode = " + errorCode);
}
@Override
public void onInstallStart() {
LogUtils.d(TAG, "onInstallStart");
}
@Override
public void onInstallSuccess() {
LogUtils.d(TAG, "onInstallSuccess");
}
@Override
public void onDownloadCancel() {
LogUtils.d(TAG, "onDownloadCancel");
}
});
// 5. 构建广告参数并请求
String currentAD_ID = getAD_ID();
LogUtils.d(TAG, String.format("currentAD_ID = %s", currentAD_ID));
ADParams params = new ADParams.Builder().setUpId(currentAD_ID).build();
mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
@Override
public void onBannerAdLoadSuccess() {
LogUtils.d(TAG, "onBannerAdLoadSuccess()");
// 修复广告加载成功后校验Activity状态
if (!isFinishing() && !isDestroyed()) {
showAd();
}
}
@Override
public void onAdLoadFailed(int errorCode, String errorMsg) {
LogUtils.e(TAG, "onAdLoadFailed: errorCode = " + errorCode + ", errorMsg = " + errorMsg);
// 修复:加载失败时移除当前广告实例
if (mAllBanners.contains(mBannerAd)) {
mAllBanners.remove(mBannerAd);
}
mBannerAd.destroy();
mBannerAd = null;
}
});
}
/**
* 根据当前秒数获取广告ID原逻辑保留
*/
private String getAD_ID() {
long currentSecond = System.currentTimeMillis() / 1000;
return (currentSecond % 2 == 0) ? BANNER_POS_ID :
(BuildConfig.DEBUG ? BANNER_POS_ID_WINBOLL_BETA : BANNER_POS_ID_WINBOLL);
}
/**
* 获取广告价格(原逻辑保留,添加空指针校验)
*/
private long getPrice() {
if (mBannerAd == null) {
return 0;
}
Map<String, Object> map = mBannerAd.getMediaExtraInfo();
if (map == null || map.isEmpty() || !map.containsKey("price")) {
LogUtils.w(TAG, "getPrice: media extra info is null or no price key");
return 0;
}
Object priceObj = map.get("price");
if (priceObj instanceof Long) {
return (Long) priceObj;
} else if (priceObj instanceof Integer) {
return ((Integer) priceObj).longValue();
} else {
LogUtils.e(TAG, "getPrice: price type is invalid");
return 0;
}
}
/**
* 显示隐私协议弹窗原逻辑保留优化Context使用
*/
private void showPrivacy() {
// 校验Activity状态避免弹窗泄露
if (isFinishing() || isDestroyed()) {
return;
}
String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
if (TextUtils.equals(privacyAgreeValue, String.valueOf(0))) {
LogUtils.i(TAG, "已拒绝隐私协议,广告已处于不可用状态...");
Toast.makeText(getApplicationContext(), "已拒绝隐私协议,广告已处于不可用状态", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
LogUtils.i(TAG, "已同意隐私协议开始初始化米盟SDK...");
initMimoSdk();
return;
}
LogUtils.i(TAG, "开始弹出隐私协议...");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("用户须知");
builder.setMessage("小米广告SDK隐私政策: https://dev.mi.com/distribute/doc/details?pId=1688, 请复制到浏览器查看");
builder.setIcon(R.drawable.ic_launcher);
builder.setCancelable(false); // 点击对话框以外的区域不消失
builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getSharedPreferences().edit()
.putString(PRIVACY_VALUE, String.valueOf(1))
.apply();
initMimoSdk();
dialog.dismiss();
}
});
builder.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getSharedPreferences().edit()
.putString(PRIVACY_VALUE, String.valueOf(0))
.apply();
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
// 配置弹窗位置(底部全屏)
Window window = dialog.getWindow();
if (window != null) {
window.setGravity(Gravity.BOTTOM);
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay();
WindowManager.LayoutParams p = window.getAttributes();
p.width = d.getWidth();
window.setAttributes(p);
}
dialog.show();
}
/**
* 初始化米盟SDK核心修复传递ApplicationContext + 异常捕获)
*/
private void initMimoSdk() {
// 1. 安全获取ApplicationContext避免Activity Context失效
Context appContext = getApplicationContext();
if (appContext == null) {
Log.e(TAG, "initMimoSdk: ApplicationContext is null");
return;
}
// 2. 初始化SDK捕获异常避免崩溃
try {
MimoSdk.init(appContext, new MimoCustomController() {
@Override
public boolean isCanUseLocation() {
return true;
}
@Override
public MimoLocation getMimoLocation() {
return null;
}
@Override
public boolean isCanUseWifiState() {
return true;
}
@Override
public boolean alist() {
return true;
}
}, new MimoSdk.InitCallback() {
@Override
public void success() {
Log.d(TAG, "MimoSdk init success");
}
@Override
public void fail(int code, String msg) {
Log.e(TAG, "MimoSdk init fail, code=" + code + ",msg=" + msg);
}
});
MimoSdk.setDebugOn(true);
} catch (Exception e) {
Log.e(TAG, "initMimoSdk: init failed", e);
}
}
//
// /**
// * 显示广告核心修复传递安全的Context + 生命周期校验)
// */
// private void showAd() {
// LogUtils.d(TAG, "showAd()");
// // 1. 生命周期校验避免Activity已销毁时操作UI
// if (isFinishing() || isDestroyed()) {
// LogUtils.e(TAG, "showAd: Activity is finishing or destroyed");
// return;
// }
// // 2. 非空校验:广告实例和容器
// if (mBannerAd == null || mContainer == null) {
// LogUtils.e(TAG, "showAd: BannerAd or Container is null");
// return;
// }
// // 3. 创建广告容器使用ApplicationContext避免内存泄漏
// final FrameLayout container = new FrameLayout(getApplicationContext());
// 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());
// }
// // 4. 显示广告传递ApplicationContext避免Activity Context失效
// mBannerAd.showAd(MainActivity.this, container, new BannerAd.BannerInteractionListener() {
// @Override
// public void onAdClick() {
// LogUtils.d(TAG, "onAdClick");
// }
//
// @Override
// public void onAdShow() {
// LogUtils.d(TAG, "onAdShow");
// }
//
// @Override
// public void onAdDismiss() {
// LogUtils.d(TAG, "onAdDismiss");
// // 修复移除容器时校验Activity状态
// if (!isFinishing() && !isDestroyed() && mContainer != null) {
// mContainer.removeView(container);
// }
// }
//
// @Override
// public void onRenderSuccess() {
// LogUtils.d(TAG, "onRenderSuccess");
// }
//
// @Override
// public void onRenderFail(int code, String msg) {
// LogUtils.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
// // 修复:渲染失败时移除容器
// if (!isFinishing() && !isDestroyed() && mContainer != null) {
// mContainer.removeView(container);
// }
// }
// });
// }
//
// /**
// * 请求广告核心修复Context安全校验 + 异常捕获 + 资源管理)
// */
// private void fetchAd() {
// LogUtils.d(TAG, "fetchAd()");
// // 1. 双重校验Activity未销毁 + Context非空
// if (isFinishing() || isDestroyed() || getApplicationContext() == null) {
// LogUtils.e(TAG, "fetchAd: Invalid Context or Activity state");
// return;
// }
// // 2. 释放之前的广告资源,避免内存泄漏
// if (mBannerAd != null) {
// mBannerAd.destroy();
// }
// // 3. 初始化广告使用ApplicationContext避免Activity Context失效
// try {
// mBannerAd = new BannerAd();
// mAllBanners.add(mBannerAd);
// } catch (Exception e) {
// LogUtils.e(TAG, "fetchAd: Init BannerAd failed", e);
// return;
// }
// // 4. 设置下载监听
// mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
// @Override
// public void onDownloadStarted() {
// LogUtils.d(TAG, "onDownloadStarted");
// }
//
// @Override
// public void onDownloadPaused() {
// LogUtils.d(TAG, "onDownloadPaused");
// }
//
// @Override
// public void onDownloadFailed(int errorCode) {
// LogUtils.d(TAG, "onDownloadFailed, errorCode = " + errorCode);
// }
//
// @Override
// public void onDownloadFinished() {
// LogUtils.d(TAG, "onDownloadFinished");
// }
//
// @Override
// public void onDownloadProgressUpdated(int progress) {
// LogUtils.d(TAG, "onDownloadProgressUpdated " + progress + "%");
// }
//
// @Override
// public void onInstallFailed(int errorCode) {
// LogUtils.d(TAG, "onInstallFailed, errorCode = " + errorCode);
// }
//
// @Override
// public void onInstallStart() {
// LogUtils.d(TAG, "onInstallStart");
// }
//
// @Override
// public void onInstallSuccess() {
// LogUtils.d(TAG, "onInstallSuccess");
// }
//
// @Override
// public void onDownloadCancel() {
// LogUtils.d(TAG, "onDownloadCancel");
// }
// });
//
// // 5. 构建广告参数并请求
// String currentAD_ID = getAD_ID();
// LogUtils.d(TAG, String.format("currentAD_ID = %s", currentAD_ID));
// ADParams params = new ADParams.Builder().setUpId(currentAD_ID).build();
// mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
// @Override
// public void onBannerAdLoadSuccess() {
// LogUtils.d(TAG, "onBannerAdLoadSuccess()");
// // 修复广告加载成功后校验Activity状态
// if (!isFinishing() && !isDestroyed()) {
// showAd();
// }
// }
//
// @Override
// public void onAdLoadFailed(int errorCode, String errorMsg) {
// LogUtils.e(TAG, "onAdLoadFailed: errorCode = " + errorCode + ", errorMsg = " + errorMsg);
// // 修复:加载失败时移除当前广告实例
// if (mAllBanners.contains(mBannerAd)) {
// mAllBanners.remove(mBannerAd);
// }
// mBannerAd.destroy();
// mBannerAd = null;
// }
// });
// }
//
// /**
// * 根据当前秒数获取广告ID原逻辑保留
// */
// private String getAD_ID() {
// long currentSecond = System.currentTimeMillis() / 1000;
// return (currentSecond % 2 == 0) ? BANNER_POS_ID :
// (BuildConfig.DEBUG ? BANNER_POS_ID_WINBOLL_BETA : BANNER_POS_ID_WINBOLL);
// }
//
// /**
// * 获取广告价格(原逻辑保留,添加空指针校验)
// */
// private long getPrice() {
// if (mBannerAd == null) {
// return 0;
// }
// Map<String, Object> map = mBannerAd.getMediaExtraInfo();
// if (map == null || map.isEmpty() || !map.containsKey("price")) {
// LogUtils.w(TAG, "getPrice: media extra info is null or no price key");
// return 0;
// }
// Object priceObj = map.get("price");
// if (priceObj instanceof Long) {
// return (Long) priceObj;
// } else if (priceObj instanceof Integer) {
// return ((Integer) priceObj).longValue();
// } else {
// LogUtils.e(TAG, "getPrice: price type is invalid");
// return 0;
// }
// }
//
// /**
// * 显示隐私协议弹窗原逻辑保留优化Context使用
// */
// private void showPrivacy() {
// // 校验Activity状态避免弹窗泄露
// if (isFinishing() || isDestroyed()) {
// return;
// }
// String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
// if (TextUtils.equals(privacyAgreeValue, String.valueOf(0))) {
// LogUtils.i(TAG, "已拒绝隐私协议,广告已处于不可用状态...");
// Toast.makeText(getApplicationContext(), "已拒绝隐私协议,广告已处于不可用状态", Toast.LENGTH_SHORT).show();
// return;
// }
// if (TextUtils.equals(privacyAgreeValue, String.valueOf(1))) {
// LogUtils.i(TAG, "已同意隐私协议开始初始化米盟SDK...");
// initMimoSdk();
// return;
// }
// LogUtils.i(TAG, "开始弹出隐私协议...");
// AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setTitle("用户须知");
// builder.setMessage("小米广告SDK隐私政策: https://dev.mi.com/distribute/doc/details?pId=1688, 请复制到浏览器查看");
// builder.setIcon(R.drawable.ic_launcher);
// builder.setCancelable(false); // 点击对话框以外的区域不消失
// builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// getSharedPreferences().edit()
// .putString(PRIVACY_VALUE, String.valueOf(1))
// .apply();
// initMimoSdk();
// dialog.dismiss();
// }
// });
// builder.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// getSharedPreferences().edit()
// .putString(PRIVACY_VALUE, String.valueOf(0))
// .apply();
// dialog.dismiss();
// }
// });
// AlertDialog dialog = builder.create();
//
// // 配置弹窗位置(底部全屏)
// Window window = dialog.getWindow();
// if (window != null) {
// window.setGravity(Gravity.BOTTOM);
// WindowManager m = getWindowManager();
// Display d = m.getDefaultDisplay();
// WindowManager.LayoutParams p = window.getAttributes();
// p.width = d.getWidth();
// window.setAttributes(p);
// }
// dialog.show();
// }
//
// /**
// * 初始化米盟SDK核心修复传递ApplicationContext + 异常捕获)
// */
// private void initMimoSdk() {
// // 1. 安全获取ApplicationContext避免Activity Context失效
// Context appContext = getApplicationContext();
// if (appContext == null) {
// Log.e(TAG, "initMimoSdk: ApplicationContext is null");
// return;
// }
// // 2. 初始化SDK捕获异常避免崩溃
// try {
// MimoSdk.init(appContext, new MimoCustomController() {
// @Override
// public boolean isCanUseLocation() {
// return true;
// }
//
// @Override
// public MimoLocation getMimoLocation() {
// return null;
// }
//
// @Override
// public boolean isCanUseWifiState() {
// return true;
// }
//
// @Override
// public boolean alist() {
// return true;
// }
// }, new MimoSdk.InitCallback() {
// @Override
// public void success() {
// Log.d(TAG, "MimoSdk init success");
// }
//
// @Override
// public void fail(int code, String msg) {
// Log.e(TAG, "MimoSdk init fail, code=" + code + ",msg=" + msg);
// }
// });
// MimoSdk.setDebugOn(true);
// } catch (Exception e) {
// Log.e(TAG, "initMimoSdk: init failed", e);
// }
// }
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
@@ -605,23 +615,23 @@ public class MainActivity extends WinBoLLActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
/**
* 获取SharedPreferences实例原逻辑保留添加空指针校验
*/
public SharedPreferences getSharedPreferences() {
if (mSharedPreferences == null) {
// 修复使用ApplicationContext获取SharedPreferences避免Activity Context泄露
Context appContext = getApplicationContext();
if (appContext != null) {
mSharedPreferences = appContext.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
} else {
Log.e(TAG, "getSharedPreferences: ApplicationContext is null");
// 降级方案若ApplicationContext为空使用Activity Context仅作兼容
mSharedPreferences = super.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
}
}
return mSharedPreferences;
}
//
// /**
// * 获取SharedPreferences实例原逻辑保留添加空指针校验
// */
// public SharedPreferences getSharedPreferences() {
// if (mSharedPreferences == null) {
// // 修复使用ApplicationContext获取SharedPreferences避免Activity Context泄露
// Context appContext = getApplicationContext();
// if (appContext != null) {
// mSharedPreferences = appContext.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
// } else {
// Log.e(TAG, "getSharedPreferences: ApplicationContext is null");
// // 降级方案若ApplicationContext为空使用Activity Context仅作兼容
// mSharedPreferences = super.getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
// }
// }
// return mSharedPreferences;
// }
}

View File

@@ -29,21 +29,12 @@
android:layout_height="match_parent"
android:id="@+id/activitymainFrameLayout1"/>
</RelativeLayout>
<LinearLayout
android:orientation="vertical"
<cc.winboll.studio.libaes.views.ADsBannerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/activitymainLinearLayout1">
android:id="@+id/adsbanner"/>
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
</LinearLayout>