From 1b27a928b92b94daea76a1a103d4fc7b59bbf0c7 Mon Sep 17 00:00:00 2001 From: litingting Date: Thu, 21 Nov 2024 17:16:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5max=E6=8F=92=E9=A1=B5?= =?UTF-8?q?=E5=92=8C=E5=8E=9F=E7=94=9F=E5=B9=BF=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 39 +++- app/google-services.json | 12 +- .../music/playermp3/MusicApplication.java | 28 +++ .../music/playermp3/adapter/AdapterHome.java | 2 +- .../playermp3/adapter/AdapterLikeSong.java | 2 +- .../adapter/AdapterResultListAlbum.java | 2 +- .../adapter/AdapterResultListSong.java | 2 +- .../playermp3/firebase/RemoteConfigJava.java | 10 +- .../offline/music/playermp3/firebase/Sp.java | 2 +- .../music/playermp3/helper/CommonUtils.java | 4 +- .../music/playermp3/max/MaxListener.java | 11 + .../music/playermp3/max/MaxManager.java | 219 ++++++++++++++++++ .../playermp3/max/NativeMaxListener.java | 10 + .../music/playermp3/max/WelComManager.kt | 80 +++++++ .../music/playermp3/max/onAdAfterAction.java | 6 + .../playermp3/max/onAdStatusListener.java | 6 + .../playermp3/media3/MyDownloadService.java | 9 +- .../media3/MyMediaControllerManager.java | 14 +- .../playermp3/media3/PlaybackService.java | 4 +- .../music/playermp3/network/JsonHelper.java | 21 +- .../playermp3/network/RetrofitManager.java | 2 +- .../service/MusicPlayerForegroundService.java | 6 +- .../ui/activity/A_SplashActivity.java | 41 ++-- .../playermp3/ui/activity/BaseActivity.java | 4 +- .../ui/activity/LikeSongActivity.java | 27 ++- .../playermp3/ui/activity/PlayActivity.java | 127 ++++++---- .../ui/activity/ResultListActivity.java | 2 +- .../ui/activity/viewmodel/VMPlay.java | 2 +- .../playermp3/ui/fragmnt/ProfileFragment.java | 28 ++- .../playermp3/ui/fragmnt/SearchFragment.java | 52 ++++- .../main/res/layout/activity_like_song.xml | 20 +- app/src/main/res/layout/fragment_search.xml | 22 +- app/src/main/res/layout/item_search.xml | 4 + app/src/main/res/layout/item_search_child.xml | 5 + build.gradle.kts | 9 +- gradle.properties | 2 +- settings.gradle.kts | 6 + 37 files changed, 695 insertions(+), 147 deletions(-) create mode 100644 app/src/main/java/com/offline/music/playermp3/max/MaxListener.java create mode 100644 app/src/main/java/com/offline/music/playermp3/max/MaxManager.java create mode 100644 app/src/main/java/com/offline/music/playermp3/max/NativeMaxListener.java create mode 100644 app/src/main/java/com/offline/music/playermp3/max/WelComManager.kt create mode 100644 app/src/main/java/com/offline/music/playermp3/max/onAdAfterAction.java create mode 100644 app/src/main/java/com/offline/music/playermp3/max/onAdStatusListener.java diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fc99f1f..42f4993 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,13 +3,17 @@ import java.text.SimpleDateFormat plugins { id("com.android.application") -// id("org.jetbrains.kotlin.android") + id("org.jetbrains.kotlin.android") // id ("kotlin-kapt") id("io.objectbox") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") -} + id("applovin-quality-service") +} +applovin { + apiKey = "4CFHxOfvQvy95EqDxa_eNPe4pmq_KfoZPJeVscTMt2uT3VL2fO3iyZyBFMTOOTRbKw6WelbaDEhNzxOxVrlQTE" +} val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) android { @@ -17,7 +21,7 @@ android { compileSdk = 34 defaultConfig { - applicationId = "com.offline.music.playermp3.test" + applicationId = "com.offline.music.playermp3" minSdk = 23 targetSdk = 34 versionCode = 1 @@ -40,9 +44,9 @@ android { ) } } -// kotlinOptions{ -// jvmTarget = "1.8" -// } + kotlinOptions{ + jvmTarget = "1.8" + } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 @@ -98,4 +102,27 @@ dependencies { implementation("com.google.firebase:firebase-crashlytics") implementation("com.google.firebase:firebase-analytics") implementation("com.google.firebase:firebase-config") + + + //-----------------------applovin + implementation("com.applovin:applovin-sdk:+") + implementation("com.applovin.mediation:bigoads-adapter:+") + implementation("com.applovin.mediation:chartboost-adapter:+") + implementation("com.google.android.gms:play-services-base:16.1.0") + implementation("com.applovin.mediation:fyber-adapter:+") +// implementation("com.applovin.mediation:google-ad-manager-adapter:+") +// implementation("com.applovin.mediation:google-adapter:+") + implementation("com.applovin.mediation:inmobi-adapter:+") + implementation("com.squareup.picasso:picasso:2.71828") + implementation("androidx.recyclerview:recyclerview:1.1.0") + implementation("com.applovin.mediation:ironsource-adapter:+") + implementation("com.applovin.mediation:vungle-adapter:+") + implementation("com.applovin.mediation:facebook-adapter:+") + implementation("com.applovin.mediation:moloco-adapter:+") + implementation("com.applovin.mediation:bytedance-adapter:+") + implementation("com.applovin.mediation:unityads-adapter:+") + + + //applovin The SDK collects the Google Advertising ID. This requires the Android Advertising ID (AAID) module (com.google.android.gms:play-services-ads-identifier). + implementation("com.google.android.gms:play-services-ads-identifier:18.1.0") } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json index 9ea1714..b447bd2 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -1,21 +1,21 @@ { "project_info": { - "project_number": "550960818622", - "project_id": "himelody-and", - "storage_bucket": "himelody-and.appspot.com" + "project_number": "764712897094", + "project_id": "offline-music-player-176ab", + "storage_bucket": "offline-music-player-176ab.firebasestorage.app" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:550960818622:android:96fd4141e43410fb24f1ef", + "mobilesdk_app_id": "1:764712897094:android:2d533528b5ff4271a45847", "android_client_info": { - "package_name": "com.offline.music.playermp3.test" + "package_name": "com.offline.music.playermp3" } }, "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyCp3XR60onMqiGj9pD8ADmrDEOOn__sQDk" + "current_key": "AIzaSyDohnv8AScCd1A7RTR-6LLLtQcE7EuJmIw" } ], "services": { diff --git a/app/src/main/java/com/offline/music/playermp3/MusicApplication.java b/app/src/main/java/com/offline/music/playermp3/MusicApplication.java index 70a4a8f..3c8d731 100644 --- a/app/src/main/java/com/offline/music/playermp3/MusicApplication.java +++ b/app/src/main/java/com/offline/music/playermp3/MusicApplication.java @@ -2,11 +2,17 @@ package com.offline.music.playermp3; import android.app.Application; import android.content.Context; +import android.content.Intent; import androidx.annotation.OptIn; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.media3.common.util.UnstableApi; import androidx.media3.database.StandaloneDatabaseProvider; +import com.applovin.sdk.AppLovinMediationProvider; +import com.applovin.sdk.AppLovinSdk; +import com.applovin.sdk.AppLovinSdkConfiguration; +import com.applovin.sdk.AppLovinSdkInitializationConfiguration; import com.offline.music.playermp3.api.MediaControllerStatusListener; import com.offline.music.playermp3.firebase.RemoteConfigJava; import com.offline.music.playermp3.firebase.Sp; @@ -21,7 +27,10 @@ public class MusicApplication extends Application { public static String visitorData; + private String MAx_SDK_key = "tAh5Z8CtFiG05NfRWh9UuOHCp3h3SaFvlh6Phw5ucaxFMCRs2d97F7lywfBKOEKSipdaGq8vZOaDLZkrL1fDDc"; + public static boolean initSDkOK = false; + public static String initAction = "MUSIC_ACTION_INIT"; public static void setVisitorData(String visitorData) { @@ -37,6 +46,7 @@ public class MusicApplication extends Application { public void onCreate() { super.onCreate(); myApplication = this; + InitializeMax(); Sp.init(this); RemoteConfigJava.getInstance().init(this); ObjectBoxManager.init(this); @@ -49,6 +59,24 @@ public class MusicApplication extends Application { CommonUtils.LogMsg("=-----mediaController+" + isOk); } }); + + } + + private void InitializeMax(){ + AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder( MAx_SDK_key, this ) + .setMediationProvider( AppLovinMediationProvider.MAX ) + .build(); + + // Initialize the SDK with the configuration + AppLovinSdk.getInstance( this ).initialize( initConfig, new AppLovinSdk.SdkInitializationListener() + { + @Override + public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig) + { + initSDkOK = true; + LocalBroadcastManager.getInstance(MusicApplication.this).sendBroadcast(new Intent(initAction)); + } + } ); } diff --git a/app/src/main/java/com/offline/music/playermp3/adapter/AdapterHome.java b/app/src/main/java/com/offline/music/playermp3/adapter/AdapterHome.java index 2a40683..8e0971e 100644 --- a/app/src/main/java/com/offline/music/playermp3/adapter/AdapterHome.java +++ b/app/src/main/java/com/offline/music/playermp3/adapter/AdapterHome.java @@ -39,7 +39,7 @@ public class AdapterHome extends BaseAdapter List singleList = responseHomeChild.getSingleList(); List categoryList = responseHomeChild.getCategoryList(); - CommonUtils.LogMsg("position="+position+"-----------headTitle-=" + responseHomeChild.getHeaderTitle()+"--singleList="+singleList+"---categoryList="+categoryList); +// CommonUtils.LogMsg("position="+position+"-----------headTitle-=" + responseHomeChild.getHeaderTitle()+"--singleList="+singleList+"---categoryList="+categoryList); if (singleList != null && singleList.size() > 0) { vb.recyclerSinger.setVisibility(View.VISIBLE); AdapterSinger adapterSinger = new AdapterSinger(); diff --git a/app/src/main/java/com/offline/music/playermp3/adapter/AdapterLikeSong.java b/app/src/main/java/com/offline/music/playermp3/adapter/AdapterLikeSong.java index 0412a8c..ee3d8d6 100644 --- a/app/src/main/java/com/offline/music/playermp3/adapter/AdapterLikeSong.java +++ b/app/src/main/java/com/offline/music/playermp3/adapter/AdapterLikeSong.java @@ -92,7 +92,7 @@ public class AdapterLikeSong extends BaseAdapter() { @Override @@ -113,13 +113,13 @@ public class RemoteConfigJava { } }); } catch (Exception ignore) { - CommonUtils.LogErrorMsg("onConfigUpdate Exception " + ignore.getMessage()); + CommonUtils.LogMsg("---FirebaseRemote---onConfigUpdate Exception " + ignore.getMessage()); } } @Override public void onError(@NonNull FirebaseRemoteConfigException error) { - CommonUtils.LogErrorMsg("onConfigUpdate onError " + error.getMessage()); + CommonUtils.LogMsg("---FirebaseRemote---onConfigUpdate onError " + error.getMessage()); } }); } @@ -147,7 +147,7 @@ public class RemoteConfigJava { } }); } catch (Exception exception) { - CommonUtils.LogErrorMsg(" exception = " + exception.getMessage()); + CommonUtils.LogMsg("---FirebaseRemote--- exception = " + exception.getMessage()); } } @@ -156,7 +156,7 @@ public class RemoteConfigJava { for (Map.Entry entry : all.entrySet()) { FirebaseRemoteConfigValue value = entry.getValue(); String key = entry.getKey(); - CommonUtils.LogMsg("from = " + from + "Key = " + key + " Value = " + value.asString()); + CommonUtils.LogMsg("---FirebaseRemote---from = " + from + "Key = " + key + " Value = " + value.asString()); if (TextUtils.equals(key_open_type, key)) { Sp.getInstance() diff --git a/app/src/main/java/com/offline/music/playermp3/firebase/Sp.java b/app/src/main/java/com/offline/music/playermp3/firebase/Sp.java index d1e1232..b74d1d3 100644 --- a/app/src/main/java/com/offline/music/playermp3/firebase/Sp.java +++ b/app/src/main/java/com/offline/music/playermp3/firebase/Sp.java @@ -39,6 +39,6 @@ public class Sp { } public String getStringValue(String key) { - return preferences.getString(key, RemoteConfigJava.value_open_type_1); + return preferences.getString(key, RemoteConfigJava.value_open_type_0); } } diff --git a/app/src/main/java/com/offline/music/playermp3/helper/CommonUtils.java b/app/src/main/java/com/offline/music/playermp3/helper/CommonUtils.java index 1c3eba5..0768e1f 100644 --- a/app/src/main/java/com/offline/music/playermp3/helper/CommonUtils.java +++ b/app/src/main/java/com/offline/music/playermp3/helper/CommonUtils.java @@ -150,9 +150,9 @@ public class CommonUtils { int dominantDarkColor = darkVibrantSwatch.getRgb(); listener.onImageColor(dominantDarkColor); String dominantColorHex = String.format("#%06X", (0xFFFFFF & dominantDarkColor)); - Log.d("Dominant Dark Color", "主色调: " + dominantColorHex); // 打印主色调 + } else { - Log.d("Dominant Dark Color", "未找到深色主色调"); + listener.onImageColor(-1); } } diff --git a/app/src/main/java/com/offline/music/playermp3/max/MaxListener.java b/app/src/main/java/com/offline/music/playermp3/max/MaxListener.java new file mode 100644 index 0000000..a2a1d12 --- /dev/null +++ b/app/src/main/java/com/offline/music/playermp3/max/MaxListener.java @@ -0,0 +1,11 @@ +package com.offline.music.playermp3.max; + +import com.applovin.mediation.MaxAd; + +public interface MaxListener { + void onFail(MaxAd ad); + + void onShowSuccess(MaxAd ad); + + void onHidden(); +} diff --git a/app/src/main/java/com/offline/music/playermp3/max/MaxManager.java b/app/src/main/java/com/offline/music/playermp3/max/MaxManager.java new file mode 100644 index 0000000..dbdd7cf --- /dev/null +++ b/app/src/main/java/com/offline/music/playermp3/max/MaxManager.java @@ -0,0 +1,219 @@ +package com.offline.music.playermp3.max; + +import android.app.Activity; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.MaxAdListener; +import com.applovin.mediation.MaxError; +import com.applovin.mediation.ads.MaxInterstitialAd; +import com.applovin.mediation.nativeAds.MaxNativeAdListener; +import com.applovin.mediation.nativeAds.MaxNativeAdLoader; +import com.applovin.mediation.nativeAds.MaxNativeAdView; +import com.offline.music.playermp3.MusicApplication; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class MaxManager { + + + + public static final String AD_TAG = "------MAX---------"; + + + /** + * 原生广告 + */ + //small + public static final String native_Ad1 = "318a8ed92bb2596d"; + //small + public static final String native_Ad2 = "63e3d50c36c627d2"; + /** + * 插页广告 + */ + private static final String one_AD = "6510769676690c4d"; + private static final String two_Ad = "7c6b55091a9aaf39"; + private static final String three_ad = "39c6f571b5939dde"; + + + public static final int type_no_cache = 0; + public static final int type_has_cache = 1; + public static final int type_show_success = 2; + public static final int type_show_close = 3; + public static final int type_show_fail = 4; + + private static List adList = new ArrayList<>(); + + public static MaxInterstitialAd getAd(List list) { + Collections.shuffle(list); + for (MaxInterstitialAd ad : list) { + if (ad.isReady()) { + return ad; + } + } + return null; + } + + public static void onLoadNativeAd(ViewGroup nativeAdContainer, String adPlace,NativeMaxListener listener) { + MaxNativeAdLoader nativeAdLoader; + + nativeAdLoader = new MaxNativeAdLoader(adPlace, MusicApplication.myApplication); + nativeAdLoader.setNativeAdListener(new MaxNativeAdListener() { + MaxAd nativeAd; + @Override + public void onNativeAdLoaded(@Nullable MaxNativeAdView maxNativeAdView, @NonNull MaxAd maxAd) { + // Clean up any pre-existing native ad to prevent memory leaks. + if (nativeAd != null) { + nativeAdLoader.destroy(nativeAd); + } + + // Save ad for cleanup. + nativeAd = maxAd; + + // Add ad view to view. + nativeAdContainer.removeAllViews(); + nativeAdContainer.addView(maxNativeAdView); + nativeAdContainer.setVisibility(View.VISIBLE); + listener.onLoaded(maxAd,nativeAdLoader); + Log.d(AD_TAG, "-------onNativeAdLoaded-----maxAd=" + maxAd.getAdUnitId()); + } + + @Override + public void onNativeAdLoadFailed(@NonNull String s, @NonNull MaxError maxError) { + super.onNativeAdLoadFailed(s, maxError); + Log.d(AD_TAG, "-------onNativeAdLoadFailed-----maxAd=" + maxError.getMessage()); + } + }); + nativeAdLoader.loadAd(); + } + + public static void clearNativeAd(MaxAd nativeAd, MaxNativeAdLoader nativeAdLoader) { + if (nativeAd != null) { + nativeAdLoader.destroy(nativeAd); + } + nativeAdLoader.destroy(); + } + + + + public static List onLoadAd() { + if (adList.isEmpty()) { + MaxInterstitialAd AdT = new MaxInterstitialAd(two_Ad, MusicApplication.myApplication); + MaxInterstitialAd AdOne = new MaxInterstitialAd(one_AD, MusicApplication.myApplication); + MaxInterstitialAd AdThree = new MaxInterstitialAd(three_ad, MusicApplication.myApplication); + adList.add(AdOne); + adList.add(AdT); + adList.add(AdThree); + } + + for (MaxInterstitialAd ad : adList) { + if (!ad.isReady()) { + setMyListener(ad, new MaxListener() { + @Override + public void onFail(MaxAd ad) { + + } + + @Override + public void onShowSuccess(MaxAd ad) { + + } + + @Override + public void onHidden() { + + } + }); + ad.loadAd(); + } + + } + + return adList; + } + + public static void setMyListener(MaxInterstitialAd ad, MaxListener maxListener) { + ad.setListener(new MaxAdListener() { + @Override + public void onAdLoaded(@NonNull MaxAd maxAd) { + Log.d(AD_TAG, "-------onAdLoaded-----maxAd=" + maxAd.getAdUnitId()); + } + + @Override + public void onAdDisplayed(@NonNull MaxAd maxAd) { + Log.d(AD_TAG, "-------onAdDisplayed-----maxAd=" + maxAd.getAdUnitId()); + maxListener.onShowSuccess(maxAd); + } + + @Override + public void onAdHidden(@NonNull MaxAd maxAd) { + Log.d(AD_TAG, "-------onAdHidden-----maxAd=" + maxAd.getAdUnitId()); + maxListener.onHidden(); + ad.loadAd(); + } + + @Override + public void onAdClicked(@NonNull MaxAd maxAd) { + + } + + @Override + public void onAdLoadFailed(@NonNull String s, @NonNull MaxError maxError) { + Log.d(AD_TAG, "-------onAdLoadFailed-----s=" + s + "----maxError=" + maxError.getMessage()); + } + + @Override + public void onAdDisplayFailed(@NonNull MaxAd maxAd, @NonNull MaxError maxError) { + maxListener.onFail(maxAd); + } + }); + + } + + protected static void ShowAd(Activity activity, onAdStatusListener listener) { + MaxInterstitialAd ad = MaxManager.getAd(adList); + if (ad == null) { + listener.onAdStatus(type_no_cache); + } else { + listener.onAdStatus(type_has_cache); + MaxManager.setMyListener(ad, new MaxListener() { + @Override + public void onFail(MaxAd ad) { + listener.onAdStatus(type_show_fail); + } + + @Override + public void onShowSuccess(MaxAd ad) { + listener.onAdStatus(type_show_success); + } + + @Override + public void onHidden() { + listener.onAdStatus(type_show_close); + } + }); + ad.showAd(activity); + } + } + + + public static void startShowMaxAd(Activity activity, onAdAfterAction listener) { + MaxManager.ShowAd(activity, new onAdStatusListener() { + @Override + public void onAdStatus(int type) { + if (type == MaxManager.type_show_close || type == MaxManager.type_show_fail || type == MaxManager.type_no_cache) { + if (listener != null) + listener.onAction(); + } + } + }); + } + +} diff --git a/app/src/main/java/com/offline/music/playermp3/max/NativeMaxListener.java b/app/src/main/java/com/offline/music/playermp3/max/NativeMaxListener.java new file mode 100644 index 0000000..ed94df5 --- /dev/null +++ b/app/src/main/java/com/offline/music/playermp3/max/NativeMaxListener.java @@ -0,0 +1,10 @@ +package com.offline.music.playermp3.max; + +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.nativeAds.MaxNativeAdLoader; + +public interface NativeMaxListener { + void onLoaded(MaxAd ad, MaxNativeAdLoader maxNativeAdLoader); + + +} diff --git a/app/src/main/java/com/offline/music/playermp3/max/WelComManager.kt b/app/src/main/java/com/offline/music/playermp3/max/WelComManager.kt new file mode 100644 index 0000000..c2a614c --- /dev/null +++ b/app/src/main/java/com/offline/music/playermp3/max/WelComManager.kt @@ -0,0 +1,80 @@ +package com.offline.music.playermp3.max + +import android.app.Activity +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.CountDownTimer +import android.util.Log +import androidx.localbroadcastmanager.content.LocalBroadcastManager + +import com.applovin.mediation.ads.MaxInterstitialAd +import com.offline.music.playermp3.MusicApplication + + +object WelComManager { + + private lateinit var timer: CountDownTimer + + private var need_Show = true + + private lateinit var lists: List + + + + @JvmStatic + fun initTimer(activity: Activity, countTime: Long,countAction: (Long) -> Unit, goMainAction: () -> Unit): CountDownTimer { + need_Show = true + timer = object : CountDownTimer(countTime, 100) { + override fun onTick(millisUntilFinished: Long) { + countAction.invoke(millisUntilFinished) + if (need_Show) { + MaxManager.ShowAd(activity) { + Log.d(MaxManager.AD_TAG, "--onTick----------it=$it") + if (it == MaxManager.type_has_cache) { + need_Show = false + } + if (it == MaxManager.type_show_close || it == MaxManager.type_show_fail) { + Log.d(MaxManager.AD_TAG, "--onTick---------enter") + goMainAction.invoke() + } + } + } + } + + override fun onFinish() { + if (need_Show) { + MaxManager.ShowAd(activity) { + if (it == MaxManager.type_show_close || it == MaxManager.type_show_fail || it == MaxManager.type_no_cache) { + Log.d(MaxManager.AD_TAG, "--onFinish---------enter") + goMainAction.invoke() + } + } + } + } + } + startAd(activity) + return timer + } + + private fun startAd(activity: Activity) { + if (!MusicApplication.initSDkOK) { + timer.start() + LocalBroadcastManager.getInstance(activity) + .registerReceiver(object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + lists = MaxManager.onLoadAd() + + Log.d(MaxManager.AD_TAG, "------------1sucess") + } + }, IntentFilter(MusicApplication.initAction)) + } else { + lists = MaxManager.onLoadAd() + timer.start() + Log.d(MaxManager.AD_TAG, "------------2sucess") + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/offline/music/playermp3/max/onAdAfterAction.java b/app/src/main/java/com/offline/music/playermp3/max/onAdAfterAction.java new file mode 100644 index 0000000..0d741fb --- /dev/null +++ b/app/src/main/java/com/offline/music/playermp3/max/onAdAfterAction.java @@ -0,0 +1,6 @@ +package com.offline.music.playermp3.max; + +public interface onAdAfterAction { + + void onAction(); +} diff --git a/app/src/main/java/com/offline/music/playermp3/max/onAdStatusListener.java b/app/src/main/java/com/offline/music/playermp3/max/onAdStatusListener.java new file mode 100644 index 0000000..4204417 --- /dev/null +++ b/app/src/main/java/com/offline/music/playermp3/max/onAdStatusListener.java @@ -0,0 +1,6 @@ +package com.offline.music.playermp3.max; + +public interface onAdStatusListener { + + void onAdStatus(int type); +} diff --git a/app/src/main/java/com/offline/music/playermp3/media3/MyDownloadService.java b/app/src/main/java/com/offline/music/playermp3/media3/MyDownloadService.java index 8fee5f2..cb6de1e 100644 --- a/app/src/main/java/com/offline/music/playermp3/media3/MyDownloadService.java +++ b/app/src/main/java/com/offline/music/playermp3/media3/MyDownloadService.java @@ -90,14 +90,15 @@ public class MyDownloadService extends DownloadService { if (download.state == Download.STATE_COMPLETED) { // 下载完成 vmApplication.setDownloadChange(new Pair<>(true, download)); - CommonUtils.LogMsg("----------------下载完成 id=" + id + "--thread=" + Thread.currentThread().getName()); +// CommonUtils.LogMsg("----------------下载完成 id=" + id + "--thread=" + Thread.currentThread().getName()); updateDownloadUi(vmApplication); } else if (download.state == Download.STATE_FAILED) { // 下载失败 - CommonUtils.LogMsg("----------------下载失败 id=" + id + "---finalException=" + finalException.getMessage()); +// CommonUtils.LogMsg("----------------下载失败 id=" + id + "---finalException=" + finalException.getMessage()); vmApplication.setDownloadChange(new Pair<>(false, download)); + updateDownloadUi(vmApplication); } @@ -118,7 +119,7 @@ public class MyDownloadService extends DownloadService { DownloadIndex downloadIndex = mDownloadManager.getDownloadIndex(); Download download = downloadIndex.getDownload(videoId); - return new CustomerDownload(download, download != null); + return new CustomerDownload(download, download != null && download.state == Download.STATE_COMPLETED); }).subscribeOn(Schedulers.io()) @@ -162,7 +163,7 @@ public class MyDownloadService extends DownloadService { } - CommonUtils.LogMsg("----------------下载总数量 -count=" + downloadList.size()); +// CommonUtils.LogMsg("----------------下载总数量 -count=" + downloadList.size()); vmApplication.setDownloadData(downloadList); }); diff --git a/app/src/main/java/com/offline/music/playermp3/media3/MyMediaControllerManager.java b/app/src/main/java/com/offline/music/playermp3/media3/MyMediaControllerManager.java index 6d0a7f1..a97d3cf 100644 --- a/app/src/main/java/com/offline/music/playermp3/media3/MyMediaControllerManager.java +++ b/app/src/main/java/com/offline/music/playermp3/media3/MyMediaControllerManager.java @@ -143,7 +143,7 @@ public class MyMediaControllerManager { onCallRequestUrl(nextMediaItemIndex, playNextNow, new OnHasUrlAction() { @Override public void onHasUrl() { - CommonUtils.LogMsg("-------------有有效URl--播放检查下一首 位置=" + nextMediaItemIndex); +// CommonUtils.LogMsg("-------------有有效URl--播放检查下一首 位置=" + nextMediaItemIndex); } }); } @@ -152,7 +152,7 @@ public class MyMediaControllerManager { onCallRequestUrl(previousMediaItemIndex, false, new OnHasUrlAction() { @Override public void onHasUrl() { - CommonUtils.LogMsg("-------------有有效URl--播放检查上一首 位置=" + previousMediaItemIndex); +// CommonUtils.LogMsg("-------------有有效URl--播放检查上一首 位置=" + previousMediaItemIndex); } }); } @@ -252,7 +252,7 @@ public class MyMediaControllerManager { } CharSequence title = mediaController.getMediaItemAt(i).mediaMetadata.title; - CommonUtils.LogMsg("-------------更新播放列表中的音频--id=" + playUrl.getVideoId()); +// CommonUtils.LogMsg("-------------更新播放列表中的音频--id=" + playUrl.getVideoId()); mediaController.replaceMediaItem(i, builder.build()); break; } @@ -301,7 +301,7 @@ public class MyMediaControllerManager { MediaMetadata_builder.setArtworkUri(Uri.parse(playInfo.getCovert())); MediaMetadata_builder.setTitle(playInfo.getSongTitle()); - CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + videoId + "---playInfo.getDuration()=" + playInfo.getDuration()); +// CommonUtils.LogMsg("----------添加播放列表 i=" + i + "---" + playInfo.getSingerName() + "-------VideoId=" + videoId + "---playInfo.getDuration()=" + playInfo.getDuration()); // MediaMetadata_builder.setRecordingYear(Integer.parseInt(playInfo.getYear())); builder.setMediaMetadata(MediaMetadata_builder.build()); mediaController.addMediaItem(builder.build()); @@ -386,7 +386,7 @@ public class MyMediaControllerManager { @Override public void onHasUrl() { mediaController.play(); - CommonUtils.LogMsg("-------------有有效URl--播放指定播放列表位置的歌曲 index=" + index); +// CommonUtils.LogMsg("-------------有有效URl--播放指定播放列表位置的歌曲 index=" + index); } }); @@ -404,9 +404,9 @@ public class MyMediaControllerManager { if (customerDownload.isDownload()) { MediaItem mediaItem = CommonUtils.downloadToMediaItem(customerDownload.getDownloadData()); mediaController.replaceMediaItem(index, mediaItem); - CommonUtils.LogMsg("-------------请求URl 已经下载过 index" + index + "---playNow=" + playNow); +// CommonUtils.LogMsg("-------------请求URl 已经下载过 index" + index + "---playNow=" + playNow); } else { - CommonUtils.LogMsg("-------------请求URl index" + index + "---playNow=" + playNow); +// CommonUtils.LogMsg("-------------请求URl index" + index + "---playNow=" + playNow); mListener.onRequestNextUri(mediaItemAt.mediaId, index, playNow); } diff --git a/app/src/main/java/com/offline/music/playermp3/media3/PlaybackService.java b/app/src/main/java/com/offline/music/playermp3/media3/PlaybackService.java index 57b99b0..89b4cf3 100644 --- a/app/src/main/java/com/offline/music/playermp3/media3/PlaybackService.java +++ b/app/src/main/java/com/offline/music/playermp3/media3/PlaybackService.java @@ -83,12 +83,12 @@ public class PlaybackService extends MediaSessionService { .setEventListener(new CacheDataSource.EventListener() { @Override public void onCachedBytesRead(long cacheSizeBytes, long cachedBytesRead) { - CommonUtils.LogMsg("-----------缓存1 DownloadCache --" + cacheSizeBytes + "----cacheSizeBytes=" + cachedBytesRead); +// CommonUtils.LogMsg("-----------缓存1 DownloadCache --" + cacheSizeBytes + "----cacheSizeBytes=" + cachedBytesRead); } @Override public void onCacheIgnored(int reason) { - CommonUtils.LogMsg("-----------缓存1忽略DownloadCache =" + reason); +// CommonUtils.LogMsg("-----------缓存1忽略DownloadCache =" + reason); } }); // .setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR); diff --git a/app/src/main/java/com/offline/music/playermp3/network/JsonHelper.java b/app/src/main/java/com/offline/music/playermp3/network/JsonHelper.java index 0e2e174..7022815 100644 --- a/app/src/main/java/com/offline/music/playermp3/network/JsonHelper.java +++ b/app/src/main/java/com/offline/music/playermp3/network/JsonHelper.java @@ -42,7 +42,7 @@ public class JsonHelper { JSONObject responseContext = jsonObject.getJSONObject("responseContext"); JSONArray serviceTrackingParams = responseContext.getJSONArray("serviceTrackingParams"); String visitorData = responseContext.getString("visitorData"); - CommonUtils.LogMsg("---------参数-visitorData=" + visitorData); + responseHome.setBackgroundUrl(bgUrl); responseHome.setVisitorData(visitorData); @@ -50,7 +50,7 @@ public class JsonHelper { } catch (JSONException exception) { - CommonUtils.LogMsg("---------首页-exception="); + exception.printStackTrace(); } @@ -78,7 +78,7 @@ public class JsonHelper { getCommonHome(sectionListContinuation, responseHome); } catch (JSONException exception) { - CommonUtils.LogMsg("----------exception=" + exception.getMessage()); + exception.printStackTrace(); } @@ -106,7 +106,7 @@ public class JsonHelper { String smallUrl = getCovertUrl(playlistPanelVideoRenderer, false); - CommonUtils.LogMsg("--图片--------maxUrl=" + maxUrl + "---smallUrl=" + smallUrl); + String songName = getJsonTitle(playlistPanelVideoRenderer.getJSONObject("title"), 0); @@ -247,7 +247,7 @@ public class JsonHelper { //封面图 String covert = getCovertUrl(musicResponsiveHeaderRenderer.getJSONObject("thumbnail"), true); - CommonUtils.LogMsg("----图片-------------covert=" + covert); + //轻松愉悦的经典摇滚乐 String title = getJsonTitle(musicResponsiveHeaderRenderer.getJSONObject("title"), 0); @@ -300,13 +300,13 @@ public class JsonHelper { JSONObject arrayJSONObject = jsonArray.getJSONObject(i).getJSONObject("musicResponsiveListItemRenderer"); ResponsePlayListInfo child = getCommonCategoryList(arrayJSONObject); String thumbnail = getCovertUrl(arrayJSONObject.getJSONObject("thumbnail"), true); - CommonUtils.LogMsg("----图片-------------thumbnail=" + thumbnail); +// CommonUtils.LogMsg("----图片-------------thumbnail=" + thumbnail); child.setSmallCovert(thumbnail); // child.setCovert(thumbnail); if (child.getVideoId() == null || child.getVideoId().isEmpty()) { - CommonUtils.LogErrorMsg("--歌曲" + i + "-------------SongTitle=" + child.getSongTitle() + "--getVideoId=" + child.getVideoId() + "---请求参数browseId=" + browseId); +// CommonUtils.LogErrorMsg("--歌曲" + i + "-------------SongTitle=" + child.getSongTitle() + "--getVideoId=" + child.getVideoId() + "---请求参数browseId=" + browseId); continue; } mList.add(child); @@ -782,7 +782,7 @@ public class JsonHelper { ResponseSingle responseSingle = new ResponseSingle(); String SingerHead = getCovertUrl(musicResponsiveListItemRenderer.getJSONObject("thumbnail"), true); - CommonUtils.LogMsg("----图片-------------SingerHead=" + SingerHead); +// CommonUtils.LogMsg("----图片-------------SingerHead=" + SingerHead); JSONArray flexColumns = musicResponsiveListItemRenderer.getJSONArray("flexColumns"); @@ -889,10 +889,7 @@ public class JsonHelper { responseCategory.setTwoSubtitle(twoSubtitle); categoryList.add(responseCategory); if (j == 0) { - CommonUtils.LogMsg(" ----------2222222222----twoTitle=" + twoTitle + "--BrowseId=" - + responseCategory.getBrowseId() + "---pageType=" + responseCategory.getPageType() - + "--VideoId=" + responseCategory.getVideoId() - + "---PlayListId=" + responseCategory.getPlayListId()); + } } diff --git a/app/src/main/java/com/offline/music/playermp3/network/RetrofitManager.java b/app/src/main/java/com/offline/music/playermp3/network/RetrofitManager.java index d664068..cb8bcce 100644 --- a/app/src/main/java/com/offline/music/playermp3/network/RetrofitManager.java +++ b/app/src/main/java/com/offline/music/playermp3/network/RetrofitManager.java @@ -51,7 +51,7 @@ public class RetrofitManager { .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) - .addInterceptor(httpLoggingInterceptor) +// .addInterceptor(httpLoggingInterceptor) .build(); retrofit = new Retrofit.Builder() .baseUrl(base_Host) diff --git a/app/src/main/java/com/offline/music/playermp3/service/MusicPlayerForegroundService.java b/app/src/main/java/com/offline/music/playermp3/service/MusicPlayerForegroundService.java index 69e5788..8dd76ad 100644 --- a/app/src/main/java/com/offline/music/playermp3/service/MusicPlayerForegroundService.java +++ b/app/src/main/java/com/offline/music/playermp3/service/MusicPlayerForegroundService.java @@ -69,19 +69,19 @@ public class MusicPlayerForegroundService extends Service { // 服务启动时调用 @Override public int onStartCommand(Intent intent, int flags, int startId) { - Log.d("MusicPlayerService", "Service started"); + audioItem = (AudioItem) intent.getSerializableExtra("Path"); // 获取音频路径 if (audioItem != null) { String newAudioPath = audioItem.getFile(); // 如果新音频路径不同于当前路径,则重新初始化播放器 if (newAudioPath != null && !newAudioPath.equals(currentAudioPath)) { - Log.d("MusicPlayerService", "检测到新的音频路径,初始化播放器"); +// Log.d("MusicPlayerService", "检测到新的音频路径,初始化播放器"); currentAudioPath = newAudioPath; // 更新路径 stopAndResetMediaPlayer(); // 停止并重置播放器 initializePlayer(newAudioPath); // 初始化播放器 } else { - Log.d("MusicPlayerService", "音频路径相同,无需重新初始化播放器"); +// Log.d("MusicPlayerService", "音频路径相同,无需重新初始化播放器"); } } else { stopSelf(); // 路径为空,停止服务 diff --git a/app/src/main/java/com/offline/music/playermp3/ui/activity/A_SplashActivity.java b/app/src/main/java/com/offline/music/playermp3/ui/activity/A_SplashActivity.java index f6bc5f4..ce9257f 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/activity/A_SplashActivity.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/activity/A_SplashActivity.java @@ -7,11 +7,16 @@ import android.view.View; import com.offline.music.playermp3.databinding.ActivityAsplashBinding; import com.offline.music.playermp3.firebase.RemoteConfigJava; import com.offline.music.playermp3.firebase.Sp; +import com.offline.music.playermp3.max.WelComManager; + +import kotlin.Unit; +import kotlin.jvm.functions.Function0; +import kotlin.jvm.functions.Function1; public class A_SplashActivity extends BaseActivity { - private static final int SPLASH_TIME_OUT = 1500; + private static final int SPLASH_TIME_OUT = 14000; private CountDownTimer countDownTimer; @Override @@ -47,26 +52,23 @@ public class A_SplashActivity extends BaseActivity { } public void intData() { - - countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, 100) { - + countDownTimer = WelComManager.initTimer(this, SPLASH_TIME_OUT, new Function1() { @Override - public void onTick(long millisUntilFinished) { - - float v = 100 - (float) millisUntilFinished / SPLASH_TIME_OUT * 100; + public Unit invoke(Long aLong) { + float v = 100 - (float) aLong / SPLASH_TIME_OUT * 100; int v1 = (int) v; vb.progressBar.setProgress(v1); - + return null; } - + }, new Function0() { @Override - public void onFinish() { + public Unit invoke() { vb.progressBar.setProgress(100); enterHome(); + return null; } - }; + }); - countDownTimer.start(); } @@ -75,16 +77,25 @@ public class A_SplashActivity extends BaseActivity { } - private void enterHome(){ + private void enterHome() { String stringValue = Sp.getInstance().getStringValue(RemoteConfigJava.key_open_type); Intent intent; - if(stringValue.equals(RemoteConfigJava.value_open_type_0)){ + if (stringValue.equals(RemoteConfigJava.value_open_type_0)) { intent = new Intent(A_SplashActivity.this, A_HomeActivity.class); - }else { + } else { intent = new Intent(A_SplashActivity.this, HomeActivity.class); } startActivity(intent); finish(); } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (countDownTimer != null) { + countDownTimer.cancel(); + countDownTimer = null; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/offline/music/playermp3/ui/activity/BaseActivity.java b/app/src/main/java/com/offline/music/playermp3/ui/activity/BaseActivity.java index f111a12..d4b2a6a 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/activity/BaseActivity.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/activity/BaseActivity.java @@ -147,9 +147,9 @@ public abstract class BaseActivity extends AppCompatActiv @OptIn(markerClass = UnstableApi.class) @Override public void onChanged(Integer integer) { - CommonUtils.LogMsg("----------面板 播放状态更新=" + integer); + if (panelView.getParent() == null) { - CommonUtils.LogMsg("----------显示面板"); +// CommonUtils.LogMsg("----------显示面板"); rootVb.frameLayout.addView(panelView, layoutParams); mHandler.post(mRunnable); } diff --git a/app/src/main/java/com/offline/music/playermp3/ui/activity/LikeSongActivity.java b/app/src/main/java/com/offline/music/playermp3/ui/activity/LikeSongActivity.java index 034e3fa..f798271 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/activity/LikeSongActivity.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/activity/LikeSongActivity.java @@ -10,6 +10,8 @@ import androidx.media3.common.util.UnstableApi; import androidx.media3.exoplayer.offline.Download; import androidx.recyclerview.widget.LinearLayoutManager; +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.nativeAds.MaxNativeAdLoader; import com.offline.music.playermp3.R; import com.offline.music.playermp3.adapter.AdapterDownloadSong; import com.offline.music.playermp3.adapter.AdapterLikeSong; @@ -19,6 +21,8 @@ import com.offline.music.playermp3.helper.CommonUtils; import com.offline.music.playermp3.helper.MyValue; import com.offline.music.playermp3.javabean.BoxLikeSong; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo; +import com.offline.music.playermp3.max.MaxManager; +import com.offline.music.playermp3.max.NativeMaxListener; import com.offline.music.playermp3.media3.MyDownloadService; import com.offline.music.playermp3.objectbox.ObjectBoxManager; @@ -30,7 +34,8 @@ public class LikeSongActivity extends BaseActivity impl private List boxLikeSongs; private int mType; - + private MaxAd nativeAd; + private MaxNativeAdLoader nativeAdLoader; private List> downloadList = new ArrayList<>(); @Override @@ -44,6 +49,14 @@ public class LikeSongActivity extends BaseActivity impl Intent intent = getIntent(); mType = intent.getIntExtra(MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE, MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE_LIKE); + MaxManager.onLoadNativeAd(vb.adLayout, MaxManager.native_Ad2, new NativeMaxListener() { + @Override + public void onLoaded(MaxAd ad, MaxNativeAdLoader maxNativeAdLoader) { + nativeAd = ad; + nativeAdLoader = maxNativeAdLoader; + } + }); + switch (mType) { case MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE_LIKE: vb.tvTitle.setText(getString(R.string.text_like_song)); @@ -93,6 +106,14 @@ public class LikeSongActivity extends BaseActivity impl } + @Override + protected void onDestroy() { + if(nativeAd!= null&&nativeAdLoader!= null){ + MaxManager.clearNativeAd(nativeAd,nativeAdLoader); + } + super.onDestroy(); + } + @Override protected void onInitClick() { vb.imBack.setOnClickListener(this); @@ -137,7 +158,7 @@ public class LikeSongActivity extends BaseActivity impl vmApplication.reSetPlayList(playList); String videoId = boxLikeSong.getVideoId(); - CommonUtils.LogMsg("-------------like进入 传值 videoId= " + videoId); + Intent intent = new Intent(this, PlayActivity.class); intent.putExtra(MyValue.KEY_PLAY_VIDEO_ID, videoId); intent.putExtra(MyValue.KEY_PLAY_INDEX, index); @@ -154,7 +175,7 @@ public class LikeSongActivity extends BaseActivity impl // MyDownloadService.updateDownloadUi(vmApplication) String videoId = download.request.id; - CommonUtils.LogMsg("------------Download进入 传值 videoId= " + videoId); + Intent intent = new Intent(this, PlayActivity.class); intent.putExtra(MyValue.KEY_PLAY_VIDEO_ID, videoId); intent.putExtra(MyValue.KEY_PLAY_INDEX, index); diff --git a/app/src/main/java/com/offline/music/playermp3/ui/activity/PlayActivity.java b/app/src/main/java/com/offline/music/playermp3/ui/activity/PlayActivity.java index c28a088..5bb4d5a 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/activity/PlayActivity.java @@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.net.Uri; import android.os.Handler; +import android.util.Pair; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; @@ -48,6 +49,8 @@ import com.offline.music.playermp3.javabean.CustomerUrlInfo; import com.offline.music.playermp3.javabean.response.ResponsePlayListInfo; import com.offline.music.playermp3.javabean.response.child.ResponseCategory; import com.offline.music.playermp3.javabean.response.child.ResponseSingle; +import com.offline.music.playermp3.max.MaxManager; +import com.offline.music.playermp3.max.onAdAfterAction; import com.offline.music.playermp3.media3.MyDownloadService; import com.offline.music.playermp3.media3.MyMediaControllerManager; import com.offline.music.playermp3.media3.MyPlayCacheManager; @@ -113,7 +116,12 @@ public class PlayActivity extends BaseActivity implements S @Override protected void onCreateInit() { -// vb.progressBarLoading.setVisibility(View.VISIBLE); + MaxManager.startShowMaxAd(this, new onAdAfterAction() { + @Override + public void onAction() { + + } + }); vmPlay = getActivityScopeViewModel(VMPlay.class); initMediaController(); Intent intent = getIntent(); @@ -195,7 +203,7 @@ public class PlayActivity extends BaseActivity implements S // 5--从下载歌曲进入 videoId = intent.getStringExtra(MyValue.KEY_PLAY_VIDEO_ID); mDefaultPlayStartIndex = intent.getIntExtra(MyValue.KEY_PLAY_INDEX, mDefaultPlayStartIndex); - CommonUtils.LogMsg("-------------下载歌曲 videoId= " + videoId + "---mDefaultPlayStartIndex=" + mDefaultPlayStartIndex); +// CommonUtils.LogMsg("-------------下载歌曲 videoId= " + videoId + "---mDefaultPlayStartIndex=" + mDefaultPlayStartIndex); break; } @@ -240,7 +248,7 @@ public class PlayActivity extends BaseActivity implements S vb.progressBarLoading.setVisibility(View.GONE); return; } - CommonUtils.LogMsg("--------更新-playList " + playList.size() + "--videoId=" + videoId); +// CommonUtils.LogMsg("--------更新-playList " + playList.size() + "--videoId=" + videoId); if (playList.size() > 0) { updateErrorLayout(null, false); setPlayListAndGetUrl(playList, videoId, mDefaultPlayStartIndex); @@ -276,10 +284,10 @@ public class PlayActivity extends BaseActivity implements S if(customerDownload.isDownload()){ MediaItem mediaItem = CommonUtils.downloadToMediaItem(customerDownload.getDownloadData()); mediaControllerManager.replaceMediaItem(index,mediaItem); - CommonUtils.LogMsg("-------------setPlayListAndGetUrl已经下载过 index" + index + "---playNow=" + true); +// CommonUtils.LogMsg("-------------setPlayListAndGetUrl已经下载过 index" + index + "---playNow=" + true); mediaControllerManager.playPositionMusic(index); }else { - CommonUtils.LogMsg("-------------setPlayListAndGetUrl index" + index + "---playNow=" + true); +// CommonUtils.LogMsg("-------------setPlayListAndGetUrl index" + index + "---playNow=" + true); vmPlay.getPlayUrl(id, index, true); } @@ -311,31 +319,31 @@ public class PlayActivity extends BaseActivity implements S //快进没有缓冲的时候触发 vb.btnPlay.setSelected(false); // vb.progressBarLoading.setVisibility(View.VISIBLE); - CommonUtils.LogMsg("-------------缓冲"); +// CommonUtils.LogMsg("-------------缓冲"); break; case Player.STATE_READY: vb.btnPlay.setSelected(true); mHandler.post(mRunnable); vb.progressBarLoading.setVisibility(View.GONE); - CommonUtils.LogMsg("-------------准备"); +// CommonUtils.LogMsg("-------------准备"); break; case Player.STATE_ENDED: //播放完成 vb.btnPlay.setSelected(false); - CommonUtils.LogMsg("------------- 播放完成"); +// CommonUtils.LogMsg("------------- 播放完成"); mHandler.removeCallbacks(mRunnable); // 停止更新 updatePlayComplete(); break; case MyValue.PLAY_STATUS_CODE_PAUSE: - CommonUtils.LogMsg("------------- 暂停"); +// CommonUtils.LogMsg("------------- 暂停"); vb.btnPlay.setSelected(false); vb.layoutPlayList.imPlay.setSelected(false); break; case MyValue.PLAY_STATUS_CODE_PLAYING: - CommonUtils.LogMsg("------------- 播放ing getCurIndex=" + mediaControllerManager.getCurIndex()); +// CommonUtils.LogMsg("------------- 播放ing getCurIndex=" + mediaControllerManager.getCurIndex()); vb.progressBarLoading.setVisibility(View.GONE); updateErrorLayout(null, false); vb.btnPlay.setSelected(true); @@ -344,7 +352,7 @@ public class PlayActivity extends BaseActivity implements S case MyValue.PLAY_STATUS_CODE_ERROR: vb.progressBarLoading.setVisibility(View.GONE); int currentMediaItemIndex = mediaControllerManager.getMediaController().getCurrentMediaItemIndex(); - CommonUtils.LogMsg("------------- 播放错误 currentMediaItemIndex=" + currentMediaItemIndex); +// CommonUtils.LogMsg("------------- 播放错误 currentMediaItemIndex=" + currentMediaItemIndex); mediaControllerManager.playPositionMusic(currentMediaItemIndex); // TODO: 2024/10/16 break; @@ -363,7 +371,7 @@ public class PlayActivity extends BaseActivity implements S @Override public void onChangeMusic(MediaItem mediaItem) { - CommonUtils.LogMsg("歌曲切换-" + mediaItem.mediaMetadata.title + "---id=" + mediaItem.mediaId); +// CommonUtils.LogMsg("歌曲切换-" + mediaItem.mediaMetadata.title + "---id=" + mediaItem.mediaId); loadInfo(mediaItem); } @@ -382,7 +390,12 @@ public class PlayActivity extends BaseActivity implements S vb.btnLoop.setOnClickListener(this); vb.layoutLike.setOnClickListener(this); vb.layoutDownload.setOnClickListener(this); + vmApplication.downloadChange.observe(this, new Observer>() { + @Override + public void onChanged(Pair booleanDownloadPair) { + } + }); } @@ -533,17 +546,29 @@ public class PlayActivity extends BaseActivity implements S mediaControllerManager.pause(); } } else if (v.equals(vb.btnNext)) { - mediaControllerManager.playNext(new onPlayNextListener() { + MaxManager.startShowMaxAd(this, new onAdAfterAction() { @Override - public void onPlayNext(boolean hasNext) { - if (!hasNext) { - Toast.makeText(PlayActivity.this, getString(R.string.no_next_song_yet), Toast.LENGTH_SHORT).show(); - } + public void onAction() { + mediaControllerManager.playNext(new onPlayNextListener() { + @Override + public void onPlayNext(boolean hasNext) { + if (!hasNext) { + Toast.makeText(PlayActivity.this, getString(R.string.no_next_song_yet), Toast.LENGTH_SHORT).show(); + } + } + }); } }); + } else if (v.equals(vb.btnPrevious)) { - mediaControllerManager.playPrevious(); + MaxManager.startShowMaxAd(this, new onAdAfterAction() { + @Override + public void onAction() { + mediaControllerManager.playPrevious(); + } + }); + } else if (v.equals(vb.imBack)) { finish(); } else if (v.equals(vb.btnMusicList)) { @@ -617,34 +642,41 @@ public class PlayActivity extends BaseActivity implements S } else if (v.equals(vb.layoutDownload)) { - if (vb.imDownload.isSelected()) { - //已经下载 - Toast.makeText(this,getText(R.string.text_has_downloaded),Toast.LENGTH_SHORT).show(); - return; - } - vb.downloadPb.setVisibility(View.VISIBLE); - vb.imDownload.setVisibility(View.INVISIBLE); - BoxDownloadSong curMediaItemInfo = getCurMediaItemInfo(); - if (curMediaItemInfo != null) { - Gson gson = new Gson(); - String info = gson.toJson(curMediaItemInfo); - byte[] data = info.getBytes(StandardCharsets.UTF_8); - String videoId1 = curMediaItemInfo.getVideoId(); - CommonUtils.LogMsg("----------------开始下载 id=" + videoId1); - DownloadRequest downloadRequest = new DownloadRequest.Builder(videoId1, Uri.parse(curMediaItemInfo.getVideoUrl())) - .setMimeType("video/mp4") - .setData(data) - .build(); + MaxManager.startShowMaxAd(this, new onAdAfterAction() { + @Override + public void onAction() { + if (vb.imDownload.isSelected()) { + //已经下载 + Toast.makeText(PlayActivity.this,getText(R.string.text_has_downloaded),Toast.LENGTH_SHORT).show(); + return; + } + vb.downloadPb.setVisibility(View.VISIBLE); + vb.imDownload.setVisibility(View.INVISIBLE); + BoxDownloadSong curMediaItemInfo = getCurMediaItemInfo(); + if (curMediaItemInfo != null) { + Gson gson = new Gson(); + String info = gson.toJson(curMediaItemInfo); + byte[] data = info.getBytes(StandardCharsets.UTF_8); + + String videoId1 = curMediaItemInfo.getVideoId(); + CommonUtils.LogMsg("----------------开始下载 id=" + videoId1); + DownloadRequest downloadRequest = new DownloadRequest.Builder(videoId1, Uri.parse(curMediaItemInfo.getVideoUrl())) + .setMimeType("video/mp4") + .setData(data) + .build(); + + // 启动 DownloadService 进行下载 + DownloadService.sendAddDownload( + PlayActivity.this, + MyDownloadService.class, // 上面定义的下载服务类 + downloadRequest, + true // 是否在前台运行 + ); + } + } + }); - // 启动 DownloadService 进行下载 - DownloadService.sendAddDownload( - this, - MyDownloadService.class, // 上面定义的下载服务类 - downloadRequest, - true // 是否在前台运行 - ); - } } @@ -821,6 +853,9 @@ public class PlayActivity extends BaseActivity implements S @Override public void onChanged(List downloads) { if (downloads == null || downloads.size() == 0) { + vb.downloadPb.setVisibility(View.GONE); + vb.imDownload.setVisibility(View.VISIBLE); + vb.imDownload.setSelected(false); return; } String id = downloads.get(downloads.size() - 1).request.id; @@ -832,6 +867,10 @@ public class PlayActivity extends BaseActivity implements S vb.downloadPb.setVisibility(View.GONE); vb.imDownload.setVisibility(View.VISIBLE); vb.imDownload.setSelected(true); + }else { + vb.downloadPb.setVisibility(View.GONE); + vb.imDownload.setVisibility(View.VISIBLE); + vb.imDownload.setSelected(false); } } diff --git a/app/src/main/java/com/offline/music/playermp3/ui/activity/ResultListActivity.java b/app/src/main/java/com/offline/music/playermp3/ui/activity/ResultListActivity.java index 2bc7332..adae317 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/activity/ResultListActivity.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/activity/ResultListActivity.java @@ -140,7 +140,7 @@ public class ResultListActivity extends BaseActivity switch (pageType) { case "MUSIC_PAGE_TYPE_ALBUM": //专辑 - CommonUtils.LogMsg("------------专辑-index=" + index + "--subTitle=" + subTitle); +// CommonUtils.LogMsg("------------专辑-index=" + index + "--subTitle=" + subTitle); case "MUSIC_PAGE_TYPE_PLAYLIST": //精选 Intent intent1 = new Intent(this, CategoryListActivity.class); diff --git a/app/src/main/java/com/offline/music/playermp3/ui/activity/viewmodel/VMPlay.java b/app/src/main/java/com/offline/music/playermp3/ui/activity/viewmodel/VMPlay.java index 31dbeb9..ed80ad1 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/activity/viewmodel/VMPlay.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/activity/viewmodel/VMPlay.java @@ -63,7 +63,7 @@ public class VMPlay extends ViewModel { @Override public void onFail(String errorMsg) { - CommonUtils.LogMsg("-------------此次网络请求失败 playNow="+playNow +"--playListIndex="+playListIndex); +// CommonUtils.LogMsg("-------------此次网络请求失败 playNow="+playNow +"--playListIndex="+playListIndex); _playUrlMutableLiveData.setValue(customerUrlInfo); } diff --git a/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/ProfileFragment.java b/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/ProfileFragment.java index b1d63ce..07f5509 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/ProfileFragment.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/ProfileFragment.java @@ -16,6 +16,8 @@ import com.offline.music.playermp3.helper.CommonUtils; import com.offline.music.playermp3.helper.MyValue; import com.offline.music.playermp3.javabean.BoxDownloadSong; import com.offline.music.playermp3.javabean.BoxLikeSong; +import com.offline.music.playermp3.max.MaxManager; +import com.offline.music.playermp3.max.onAdAfterAction; import com.offline.music.playermp3.media3.MyDownloadService; import com.offline.music.playermp3.objectbox.ObjectBoxManager; import com.offline.music.playermp3.ui.activity.LikeSongActivity; @@ -33,8 +35,6 @@ public class ProfileFragment extends BaseFragment implem private int likeSongCount = 0; private int downloadSongCount = 0; - - @Override protected FragmentProfileBinding getFragmentVb() { return FragmentProfileBinding.inflate(getLayoutInflater()); @@ -125,15 +125,27 @@ public class ProfileFragment extends BaseFragment implem public void onClick(View v) { if (v.equals(Vb.relayoutLike)) { if (likeSongCount > 0) { - Intent intent = new Intent(requireActivity(), LikeSongActivity.class); - intent.putExtra(MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE, MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE_LIKE); - startActivity(intent); + MaxManager.startShowMaxAd(requireActivity(), new onAdAfterAction() { + @Override + public void onAction() { + Intent intent = new Intent(requireActivity(), LikeSongActivity.class); + intent.putExtra(MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE, MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE_LIKE); + startActivity(intent); + } + }); + } } else if (v.equals(Vb.relayoutDownload)) { if (downloadSongCount > 0) { - Intent intent = new Intent(requireActivity(), LikeSongActivity.class); - intent.putExtra(MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE, MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE_DOWNLOAD); - startActivity(intent); + MaxManager.startShowMaxAd(requireActivity(), new onAdAfterAction() { + @Override + public void onAction() { + Intent intent = new Intent(requireActivity(), LikeSongActivity.class); + intent.putExtra(MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE, MyValue.KEY_ENTER_LIKE_ACTIVITY_TYPE_DOWNLOAD); + startActivity(intent); + } + }); + } } diff --git a/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/SearchFragment.java b/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/SearchFragment.java index a78073e..815b544 100644 --- a/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/SearchFragment.java +++ b/app/src/main/java/com/offline/music/playermp3/ui/fragmnt/SearchFragment.java @@ -7,10 +7,15 @@ import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.TextView; +import android.widget.Toast; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.nativeAds.MaxNativeAdLoader; +import com.offline.music.playermp3.MusicApplication; +import com.offline.music.playermp3.R; import com.offline.music.playermp3.adapter.AdapterSearch; import com.offline.music.playermp3.adapter.AdapterSuggestion; import com.offline.music.playermp3.api.HomeItemClickListener; @@ -20,6 +25,9 @@ import com.offline.music.playermp3.helper.MyValue; import com.offline.music.playermp3.javabean.response.ResponseSearch; import com.offline.music.playermp3.javabean.response.child.ResponseSearchChild; import com.offline.music.playermp3.javabean.response.child.ResponseSingle; +import com.offline.music.playermp3.max.MaxManager; +import com.offline.music.playermp3.max.NativeMaxListener; +import com.offline.music.playermp3.max.onAdAfterAction; import com.offline.music.playermp3.ui.activity.CategoryListActivity; import com.offline.music.playermp3.ui.activity.PlayActivity; import com.offline.music.playermp3.ui.activity.ResultListActivity; @@ -33,6 +41,9 @@ public class SearchFragment extends BaseFragment implemen private VMSearch vmSearch; + private MaxAd nativeAd; + private MaxNativeAdLoader nativeAdLoader; + @Override protected FragmentSearchBinding getFragmentVb() { return FragmentSearchBinding.inflate(getLayoutInflater()); @@ -91,7 +102,7 @@ public class SearchFragment extends BaseFragment implemen public void onChanged(List strings) { if (strings != null) { adapterSuggestion.setData(strings); - CommonUtils.LogMsg("------------更新="); +// CommonUtils.LogMsg("------------更新="); } } @@ -111,9 +122,16 @@ public class SearchFragment extends BaseFragment implemen if(responseSearches == null){ Vb.recyclerResult.setVisibility(View.GONE); Vb.layoutError.setVisibility(View.VISIBLE); - CommonUtils.LogMsg("------------更新结果 null"); +// CommonUtils.LogMsg("------------更新结果 null"); return; } + MaxManager.onLoadNativeAd(Vb.adLayout, MaxManager.native_Ad1, new NativeMaxListener() { + @Override + public void onLoaded(MaxAd ad, MaxNativeAdLoader maxNativeAdLoader) { + nativeAd = ad; + nativeAdLoader = maxNativeAdLoader; + } + }); Vb.recyclerResult.setVisibility(View.VISIBLE); Vb.layoutError.setVisibility(View.GONE); adapterSearch.setData(responseSearches); @@ -121,11 +139,25 @@ public class SearchFragment extends BaseFragment implemen }); } + @Override + public void onDestroy() { + if(nativeAd!= null&&nativeAdLoader!= null){ + MaxManager.clearNativeAd(nativeAd,nativeAdLoader); + } + super.onDestroy(); + } + private void startQuery(String query){ - Vb.pbloading.setVisibility(View.VISIBLE); - Vb.recyclerSuggestion.setVisibility(View.GONE); - Vb.recyclerResult.setVisibility(View.VISIBLE); - vmSearch.getSearchResult(query); + MaxManager.startShowMaxAd(requireActivity(), new onAdAfterAction() { + @Override + public void onAction() { + Vb.pbloading.setVisibility(View.VISIBLE); + Vb.recyclerSuggestion.setVisibility(View.GONE); + Vb.recyclerResult.setVisibility(View.VISIBLE); + vmSearch.getSearchResult(query); + } + }); + } @Override @@ -156,7 +188,7 @@ public class SearchFragment extends BaseFragment implemen String pageType = responseSearch.getPageType(); if(beastVideoId!= null&&!beastVideoId.isEmpty()){ - CommonUtils.LogMsg("---------击搜索结果的play按钮--beastVideoId="+beastVideoId); +// CommonUtils.LogMsg("---------击搜索结果的play按钮--beastVideoId="+beastVideoId); ResponseSingle responseSingle = new ResponseSingle(); responseSingle.setSongTitle(beastSongTitle); @@ -167,7 +199,7 @@ public class SearchFragment extends BaseFragment implemen intent.putExtra(MyValue.KEY_PLAY_ACTIVITY_SINGER, responseSingle); startActivity(intent); }else if(beastBrowserId!= null&&!beastBrowserId.isEmpty()){ - CommonUtils.LogMsg("---------击搜索结果的play按钮--pageType="+pageType); +// CommonUtils.LogMsg("---------击搜索结果的play按钮--pageType="+pageType); switch (pageType){ case "MUSIC_PAGE_TYPE_PLAYLIST": case "MUSIC_PAGE_TYPE_ALBUM": @@ -198,7 +230,7 @@ public class SearchFragment extends BaseFragment implemen if(browserId!= null&&!browserId.isEmpty()){ String pageType = responseSearchChild.getPageType(); - CommonUtils.LogMsg("---------点击搜索结果--pageType="+pageType); +// CommonUtils.LogMsg("---------点击搜索结果--pageType="+pageType); switch (pageType){ case "MUSIC_PAGE_TYPE_ARTIST": Intent intent = new Intent(requireActivity(), ResultListActivity.class); @@ -215,7 +247,7 @@ public class SearchFragment extends BaseFragment implemen } }else { - CommonUtils.LogMsg("---------点击搜索结果--VideoId="+songVideoId); +// CommonUtils.LogMsg("---------点击搜索结果--VideoId="+songVideoId); ResponseSingle responseSingle = new ResponseSingle(); responseSingle.setSongTitle(songTitle); diff --git a/app/src/main/res/layout/activity_like_song.xml b/app/src/main/res/layout/activity_like_song.xml index 15ff86b..3a757fe 100644 --- a/app/src/main/res/layout/activity_like_song.xml +++ b/app/src/main/res/layout/activity_like_song.xml @@ -19,12 +19,12 @@ app:layout_constraintTop_toTopOf="parent" /> + + + + app:layout_constraintTop_toBottomOf="@id/ad_layout" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 02dd0c4..3bbd1d8 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -1,5 +1,6 @@ + + + android:visibility="visible" /> + android:indeterminateTint="@color/white" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_search.xml b/app/src/main/res/layout/item_search.xml index 52c56f3..b16757b 100644 --- a/app/src/main/res/layout/item_search.xml +++ b/app/src/main/res/layout/item_search.xml @@ -50,6 +50,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" + android:maxLines="1" + android:ellipsize="end" android:textColor="@color/white" android:textSize="14sp" /> @@ -58,6 +60,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" + android:maxLines="1" + android:ellipsize="end" android:textColor="@color/white_60_color" android:textSize="12sp" /> diff --git a/app/src/main/res/layout/item_search_child.xml b/app/src/main/res/layout/item_search_child.xml index 843fcd9..0e16d4d 100644 --- a/app/src/main/res/layout/item_search_child.xml +++ b/app/src/main/res/layout/item_search_child.xml @@ -7,6 +7,7 @@ @@ -32,6 +35,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" + android:maxLines="1" + android:ellipsize="end" android:text="@string/app_name" android:textColor="@color/white_60_color" android:textSize="12sp" /> diff --git a/build.gradle.kts b/build.gradle.kts index f0ca203..6f1ff13 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("com.android.application") version "8.1.3" apply false -// id("org.jetbrains.kotlin.android") version "1.9.22" apply false + id("org.jetbrains.kotlin.android") version "1.9.22" apply false id("com.google.gms.google-services") version "4.3.15" apply false @@ -10,7 +10,12 @@ plugins { } buildscript { + + dependencies { classpath("io.objectbox:objectbox-gradle-plugin:4.0.3") + classpath ("com.applovin.quality:AppLovinQualityServiceGradlePlugin:+") + } -} \ No newline at end of file +} + diff --git a/gradle.properties b/gradle.properties index 3e927b1..d703cac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/settings.gradle.kts b/settings.gradle.kts index cec696b..79c5b2b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,6 +3,8 @@ pluginManagement { google() mavenCentral() gradlePluginPortal() + + maven { url = uri("https://artifacts.applovin.com/android") } } } dependencyResolutionManagement { @@ -10,6 +12,10 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + + maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") } + maven { url = uri("https://android-sdk.is.com") } + maven { url = uri("https://artifact.bytedance.com/repository/pangle") } } }