添加横幅广告

This commit is contained in:
ZhanGSKen
2025-11-14 11:45:35 +08:00
parent f943db17e0
commit 5a77a5e9e0
14 changed files with 616 additions and 67 deletions

View File

@@ -52,17 +52,41 @@ android {
includeInApk = false
includeInBundle = false
}
buildFeatures {
dataBinding true
}
lintOptions {
abortOnError false
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
api 'cc.winboll.studio:libaes:15.9.3'
api 'cc.winboll.studio:libapputils:15.8.5'
api 'cc.winboll.studio:libappbase:15.9.5'
// 吐司提示库
api 'com.github.getActivity:ToastUtils:10.5'
// 应用介绍页类库
//--------------aar依赖-----------
implementation(name: 'mimo-ad-sdk', ext: 'aar')
//--------------Maven依赖-----------
//implementation 'com.miui.zeus:mimo-ad-sdk:5.3.2'
//注意以下5个库必须要引入
implementation "androidx.appcompat:appcompat:1.2.0"
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation "androidx.navigation:navigation-ui:2.3.5"
implementation 'androidx.multidex:multidex:2.0.1'
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
// 应用介绍页类库
api 'io.github.medyo:android-about-page:2.0.0'
// SSH
api 'com.jcraft:jsch:0.1.55'
@@ -82,23 +106,9 @@ dependencies {
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
//api 'androidx.fragment:fragment:1.1.0'
/*api 'cc.winboll.studio:winboll-shared:1.8.0'
api 'io.github.medyo:android-about-page:2.0.0'
api 'com.jcraft:jsch:0.1.55'
api 'org.jsoup:jsoup:1.13.1'
api 'com.squareup.okhttp3:okhttp:4.4.1'
api 'androidx.appcompat:appcompat:1.0.0'
api 'androidx.fragment:fragment:1.0.0'
api 'com.google.android.material:material:1.0.0'
api 'com.baoyz.pullrefreshlayout:library:1.2.0'
api 'com.github.getActivity:ToastUtils:10.5'
api 'io.github.medyo:android-about-page:2.0.0'
api 'org.jsoup:jsoup:1.13.1'
api 'com.squareup.okhttp3:okhttp:4.4.1'
api 'cc.winboll.studio:libaes:7.6.0'
*/
implementation 'cc.winboll.studio:libaes:15.11.0'
implementation 'cc.winboll.studio:libappbase:15.11.0'
//api fileTree(dir: 'libs', include: ['*.aar'])
api fileTree(dir: 'libs', include: ['*.jar'])
}

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Wed Oct 22 20:17:00 HKT 2025
#Fri Nov 14 03:40:03 GMT 2025
stageCount=18
libraryProject=
baseVersion=15.4
publishVersion=15.4.17
buildCount=0
buildCount=11
baseBetaVersion=15.4.18

View File

@@ -4,6 +4,19 @@
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" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<!-- 通过GPS得到精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过网络得到粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 拍摄照片和视频 -->
<uses-permission android:name="android.permission.CAMERA"/>
@@ -36,7 +49,7 @@
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<!-- 1. 基础应用信息读取权限Android 11 及以下) -->
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE" />
@@ -47,7 +60,7 @@
<!-- 3. 可选:若需读取系统应用,添加此权限(部分机型需要) -->
<uses-permission android:name="android.permission.ACCESS_PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<application
android:name=".App"
android:allowBackup="true"
@@ -56,7 +69,10 @@
android:theme="@style/AppTheme_Default"
android:persistent="true"
android:resizeableActivity="true"
android:requestLegacyExternalStorage="true">
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning"
android:networkSecurityConfig="@xml/network_security_config">
<activity
android:name=".MainActivity"

View File

@@ -4,10 +4,10 @@ import android.content.Context;
import android.os.Environment;
import android.view.Gravity;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.receivers.GlobalApplicationReceiver;
import cc.winboll.studio.powerbell.utils.AppCacheUtils;
import cc.winboll.studio.powerbell.utils.AppConfigUtils;
import com.hjq.toast.ToastUtils;
import java.io.File;
public class App extends GlobalApplication {
@@ -50,7 +50,7 @@ public class App extends GlobalApplication {
// 设置 Toast 布局样式
//ToastUtils.setView(R.layout.toast_custom_view);
//ToastUtils.setStyle(new WhiteToastStyle());
ToastUtils.setGravity(Gravity.BOTTOM, 0, 200);
//ToastUtils.setGravity(Gravity.BOTTOM, 0, 200);
// 设置数据配置存储工具
_mAppConfigUtils = getAppConfigUtils(this);
@@ -77,5 +77,13 @@ public class App extends GlobalApplication {
public void clearBatteryHistory() {
_mAppCacheUtils.clearBatteryHistory();
}
@Override
public void onTerminate() {
super.onTerminate();
ToastUtils.release();
}
}

View File

@@ -1,5 +1,34 @@
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.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
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;
@@ -8,11 +37,16 @@ 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.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import cc.winboll.studio.libaes.views.AToolbar;
import cc.winboll.studio.libappbase.LogActivity;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.powerbell.MainActivity;
import cc.winboll.studio.powerbell.activities.AboutActivity;
@@ -23,10 +57,44 @@ 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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 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;
@@ -54,6 +122,27 @@ public class MainActivity extends WinBoLLActivity {
//LogUtils.d(TAG, "onCreate(...)");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 米盟模块
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);
@@ -85,6 +174,20 @@ public class MainActivity extends WinBoLLActivity {
}
@Override
protected void onDestroy() {
super.onDestroy();
try {
for(BannerAd ad: mAllBanners){
ad.destroy();
}
} catch (Exception e) {
e.printStackTrace();
}
}
void showFragment(Fragment fragment) {
FragmentTransaction tx = getFragmentManager().beginTransaction();
for (Fragment item : getFragmentManager().getFragments()) {
@@ -172,7 +275,7 @@ public class MainActivity extends WinBoLLActivity {
intent.setClass(this, BackgroundPictureActivity.class);
startActivity(intent);
} else if (menuItemId == R.id.action_log) {
App.getWinBoLLActivityManager().startLogActivity(this);
LogActivity.startLogActivity(this);
}
return true;
@@ -217,4 +320,246 @@ 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() {
@Override
public void onAdClick() {
Log.d(TAG, "onAdClick");
}
@Override
public void onAdShow() {
mShowBtn.setEnabled(false);
Log.d(TAG, "onAdShow");
}
@Override
public void onAdDismiss() {
Log.d(TAG, "onAdDismiss");
mContainer.removeView(container);
}
@Override
public void onRenderSuccess() {
Log.d(TAG, "onRenderSuccess");
}
@Override
public void onRenderFail(int code, String msg) {
Log.e(TAG, "onRenderFail errorCode " + code + " errorMsg " + msg);
}
});
}
private void fetchAd() {
mShowBtn.setEnabled(false);
mBannerAd = new BannerAd();
mAllBanners.add(mBannerAd);
mBannerAd.setDownLoadListener(new BannerAd.BannerDownloadListener() {
@Override
public void onDownloadStarted() {
Log.e(TAG, "onDownloadStarted");
}
@Override
public void onDownloadPaused() {
Log.e(TAG, "onDownloadPaused");
}
@Override
public void onDownloadFailed(int errorCode) {
Log.e(TAG, "onDownloadFailed, errorCode = "+ errorCode);
}
@Override
public void onDownloadFinished() {
Log.e(TAG, "onDownloadFinished");
}
@Override
public void onDownloadProgressUpdated(int progress) {
Log.e(TAG, "onDownloadProgressUpdated "+ progress + "%");
}
@Override
public void onInstallFailed(int errorCode) {
Log.e(TAG, "onInstallFailed, errorCode = "+ errorCode);
}
@Override
public void onInstallStart() {
Log.e(TAG, "onInstallStart");
}
@Override
public void onInstallSuccess() {
Log.e(TAG, "onInstallSuccess");
}
@Override
public void onDownloadCancel() {
Log.e(TAG, "onDownloadCancel");
}
});
ADParams params = new ADParams.Builder().setUpId(BANNER_POS_ID).build();
mBannerAd.loadAd(params, new BannerAd.BannerLoadListener() {
@Override
public void onBannerAdLoadSuccess() {
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);
}
}
@Override
public void onAdLoadFailed(int errorCode, String errorMsg) {
Log.e(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(){
String privacyAgreeValue = getSharedPreferences().getString(PRIVACY_VALUE, null);
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))){
Log.i(TAG, "已同意隐私协议,开始初始化...");
initMimoSdk();
return;
}
Log.i(TAG, "开始弹出隐私协议...");
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.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) {
SharedPreferences.Editor editor = getSharedPreferences().edit();
editor.putString(PRIVACY_VALUE, String.valueOf(1));
editor.apply();
initMimoSdk();
dialog.dismiss();
}
});
builder.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences.Editor editor = getSharedPreferences().edit();
editor.putString(PRIVACY_VALUE, String.valueOf(0));
editor.apply();
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
Window window = dialog.getWindow();
window.setGravity(Gravity.BOTTOM);
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay();
WindowManager.LayoutParams p = dialog.getWindow().getAttributes();
p.width = d.getWidth();
dialog.getWindow().setAttributes(p);
dialog.show();
}
private void initMimoSdk() {
MimoSdk.init(this, 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);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return super.dispatchKeyEvent(event);
}
// @Override
// public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
// return false;
// }
@Override
public void setupToolbar() {
super.setupToolbar();
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
public SharedPreferences getSharedPreferences() {
if (mSharedPreferences == null){
mSharedPreferences = getSharedPreferences(PRIVACY_FILE, Context.MODE_PRIVATE);
}
return mSharedPreferences;
}
}

View File

@@ -10,9 +10,9 @@ import android.content.Context;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import cc.winboll.studio.libaes.models.APPInfo;
import cc.winboll.studio.libaes.views.AToolbar;
import cc.winboll.studio.libaes.winboll.APPInfo;
import cc.winboll.studio.libaes.winboll.AboutView;
import cc.winboll.studio.libaes.views.AboutView;
import cc.winboll.studio.powerbell.R;
public class AboutActivity extends Activity {

View File

@@ -19,7 +19,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import cc.winboll.studio.libaes.views.AToolbar;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.App;
import cc.winboll.studio.powerbell.R;
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;

View File

@@ -4,11 +4,12 @@ import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Switch;
import android.widget.TextView;
import cc.winboll.studio.libaes.views.AOHPCTCSeekBar;
import cc.winboll.studio.libaes.views.AToolbar;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.App;
import cc.winboll.studio.powerbell.R;
import cc.winboll.studio.powerbell.beans.BatteryInfoBean;
@@ -16,7 +17,6 @@ import cc.winboll.studio.powerbell.receivers.ControlCenterServiceReceiver;
import cc.winboll.studio.powerbell.utils.AppCacheUtils;
import cc.winboll.studio.powerbell.utils.StringUtils;
import java.util.ArrayList;
import android.widget.Switch;
public class ClearRecordActivity extends Activity {

View File

@@ -6,6 +6,7 @@ package cc.winboll.studio.powerbell.activities;
*/
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
@@ -19,11 +20,11 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libaes.views.AToolbar;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
import cc.winboll.studio.powerbell.MainActivity;
import cc.winboll.studio.powerbell.R;
import cc.winboll.studio.powerbell.activities.BackgroundPictureActivity;
import cc.winboll.studio.powerbell.activities.PixelPickerActivity;
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
import cc.winboll.studio.powerbell.utils.BackgroundPictureUtils;
@@ -233,7 +234,10 @@ public class PixelPickerActivity extends WinBoLLActivity implements IWinBoLLActi
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), BackgroundPictureActivity.class);
Intent intent = new Intent();
intent.setClass(this, BackgroundPictureActivity.class);
startActivity(intent);
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), );
return true;
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false。
@@ -243,7 +247,10 @@ public class PixelPickerActivity extends WinBoLLActivity implements IWinBoLLActi
@Override
public void onBackPressed() {
super.onBackPressed();
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), BackgroundPictureActivity.class);
Intent intent = new Intent();
intent.setClass(this, BackgroundPictureActivity.class);
startActivity(intent);
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), BackgroundPictureActivity.class);
}
}

View File

@@ -5,40 +5,99 @@ package cc.winboll.studio.powerbell.activities;
* @Date 2025/06/19 20:35
* @Describe 应用窗口基类
*/
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
import cc.winboll.studio.powerbell.App;
import cc.winboll.studio.powerbell.MainActivity;
import androidx.appcompat.app.AppCompatActivity;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.miui.zeus.mimo.sdk.BuildConfig;
import cc.winboll.studio.powerbell.R;
public abstract class WinBoLLActivity extends Activity implements IWinBoLLActivity {
@SuppressLint("SetTextI18n")
public abstract class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity {
public static final String TAG = "WinBoLLActivity";
protected TextView mTagView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeFullScreen(this);
}
@Override
protected void onStart() {
super.onStart();
addVersionNameToContentView();
}
protected void addVersionNameToContentView() {
if (!isTagViewVisible()) {
return;
}
if (mTagView == null) {
mTagView = new TextView(this);
mTagView.setTextColor(Color.GRAY);
mTagView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
mTagView.setText("MIMO SDK V" + BuildConfig.VERSION_NAME);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
FrameLayout frameLayout = findViewById(android.R.id.content);
frameLayout.addView(mTagView, params);
}
}
protected boolean isTagViewVisible() {
return true;
}
public void setupToolbar() {
// mToolbar = findViewById(R.id.toolbar);
// if (mToolbar != null) {
// setSupportActionBar(mToolbar);
// if (getSupportActionBar() != null) {
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// }
// }
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
GlobalApplication.getWinBoLLActivityManager().add(this);
//GlobalApplication.getWinBoLLActivityManager().add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
GlobalApplication.getWinBoLLActivityManager().registeRemove(this);
//GlobalApplication.getWinBoLLActivityManager().registeRemove(this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
return true;
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false。
@@ -48,6 +107,25 @@ public abstract class WinBoLLActivity extends Activity implements IWinBoLLActivi
@Override
public void onBackPressed() {
super.onBackPressed();
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
}
public void changeFullScreen(Activity activity) {
Window window = activity.getWindow();
if (window == null){
return;
}
View decorView = window.getDecorView();
if (decorView == null){
return;
}
int flag = decorView.getSystemUiVisibility();
flag |= View.SYSTEM_UI_FLAG_FULLSCREEN;
flag |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
flag |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
flag |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
flag |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(flag);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}

View File

@@ -14,10 +14,12 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.widget.RemoteViews;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.App;
import cc.winboll.studio.powerbell.MainActivity;
import cc.winboll.studio.powerbell.R;
@@ -32,8 +34,6 @@ import cc.winboll.studio.powerbell.utils.AppConfigUtils;
import cc.winboll.studio.powerbell.utils.NotificationHelper;
import cc.winboll.studio.powerbell.utils.ServiceUtils;
import cc.winboll.studio.powerbell.utils.StringUtils;
import android.os.Handler;
import android.os.Looper;
public class ControlCenterService extends Service {
@@ -73,8 +73,8 @@ public class ControlCenterService extends Service {
mAppConfigUtils = App.getAppConfigUtils(this);
mAppCacheUtils = App.getAppCacheUtils(this);
mNotificationHelper = new NotificationHelper(ControlCenterService.this);
if (mMyServiceConnection == null) {
mMyServiceConnection = new MyServiceConnection();
}
@@ -105,7 +105,7 @@ public class ControlCenterService extends Service {
Intent intent = new Intent(this, MainActivity.class);
notification = helper.showForegroundNotification(intent, getString(R.string.app_name), "Service Running, Click to open app");
startForeground(NotificationHelper.FOREGROUND_NOTIFICATION_ID, notification);
// NotificationMessage notificationMessage=createNotificationMessage();
// //Toast.makeText(getApplication(), "", Toast.LENGTH_SHORT).show();
// mNotificationUtils.createForegroundNotification(this, notificationMessage);
@@ -116,7 +116,7 @@ public class ControlCenterService extends Service {
mControlCenterServiceReceiver = new ControlCenterServiceReceiver(this);
mControlCenterServiceReceiver.registerAction(this);
}
new Handler(Looper.getMainLooper()).postDelayed(new Runnable(){
@Override
@@ -126,7 +126,7 @@ public class ControlCenterService extends Service {
LogUtils.i(TAG, "Service Is Start.");
}
}, 2000);
}
}
@@ -263,15 +263,15 @@ public class ControlCenterService extends Service {
NotificationHelper helper = new NotificationHelper(ControlCenterService.this);
Intent intent = new Intent(ControlCenterService.this, MainActivity.class);
helper.showTemporaryNotification(intent, getString(R.string.app_name), msg);
// NotificationMessage notificationMessage = createNotificationMessage();
// notificationMessage.setRemindMSG(szRemindMSG);
// //LogUtils.d(TAG, "notificationMessage : " + notificationMessage.getRemindMSG());
// updateRemindNotification(notificationMessage);
}
// 设置颜色背景
public static RemoteViews setLinearLayoutColor(RemoteViews remoteViews, int viewId, int color) {
remoteViews.setInt(viewId, "setBackgroundColor", color);

View File

@@ -0,0 +1,33 @@
package cc.winboll.studio.powerbell.utils;
import android.content.Context;
import android.util.DisplayMetrics;
/**
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
* @Date 2025/11/14 11:14
* @Describe 米盟 MimoUtils
*/
public final class MimoUtils {
public static final String TAG = "Utils";
public static int dpToPx(Context context, float dp) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return (int) (dp * displayMetrics.density + 0.5f);
}
public static int pxToDp(Context context, float px) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return (int) (px / displayMetrics.density + 0.5f);
}
public static int pxToSp(Context context, float pxValue) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return (int) (pxValue / displayMetrics.scaledDensity + 0.5f);
}
public static int spToPx(Context context, float spValue) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
return (int) (spValue * displayMetrics.scaledDensity + 0.5f);
}
}

View File

@@ -31,5 +31,46 @@
</RelativeLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0">
<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
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>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>