diff --git a/powerbell/build.properties b/powerbell/build.properties index 47a29b16..7f49ca45 100644 --- a/powerbell/build.properties +++ b/powerbell/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Nov 16 14:00:04 HKT 2025 +#Tue Nov 18 08:49:06 GMT 2025 stageCount=2 libraryProject= baseVersion=15.11 publishVersion=15.11.1 -buildCount=0 +buildCount=4 baseBetaVersion=15.11.2 diff --git a/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java b/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java index d0db3129..4d00a4ae 100644 --- a/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java +++ b/powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java @@ -60,23 +60,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 mAllBanners = new ArrayList<>(); - - private ViewGroup mContainer; - - private boolean mIsBiddingWin = true; - - public static final int BACKGROUND_PICTURE_REQUEST_CODE = 0; +// private BannerAd mBannerAd; +// private List 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; @@ -102,13 +102,13 @@ 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(); +// mContainer = findViewById(R.id.ads_container); +// +// // 初始化主线程Handler(关键:确保广告操作在主线程执行) +// mMainHandler = new Handler(Looper.getMainLooper()); +// +// // 米盟模块:隐私协议弹窗 +// showPrivacy(); _mMainActivity = this; mApplication = (App) getApplication(); @@ -131,37 +131,37 @@ 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); +// } } +// +// /** +// * 释放广告资源(关键:避免内存泄漏和空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(); @@ -212,23 +212,23 @@ public class MainActivity extends WinBoLLActivity { reloadBackground(); setBackgroundColor(); - // 修复:优化广告请求逻辑(添加生命周期判断 + 主线程执行) - 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 +259,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 +292,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 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 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 +605,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; +// } } diff --git a/powerbell/src/main/res/layout/activity_main.xml b/powerbell/src/main/res/layout/activity_main.xml index 85d45a49..3d7e89e1 100644 --- a/powerbell/src/main/res/layout/activity_main.xml +++ b/powerbell/src/main/res/layout/activity_main.xml @@ -29,21 +29,12 @@ android:layout_height="match_parent" android:id="@+id/activitymainFrameLayout1"/> - - + android:text="ADs"/> - - -