V1.0.2(3) 集成max
This commit is contained in:
parent
05d7e426b0
commit
9612529c69
@ -3,13 +3,16 @@ 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,12 +20,12 @@ android {
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
//com.hi.music.player
|
||||
applicationId = "com.offline.music.player"
|
||||
//com.offline.music.playermp3
|
||||
applicationId = "com.offline.music.playermp3"
|
||||
minSdk = 23
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "1.0.0"
|
||||
versionCode = 3
|
||||
versionName = "1.0.2"
|
||||
|
||||
setProperty("archivesBaseName", "Offline Music Player" + versionName + "(${versionCode})_$timestamp")
|
||||
|
||||
@ -39,9 +42,9 @@ android {
|
||||
)
|
||||
}
|
||||
}
|
||||
// kotlinOptions{
|
||||
// jvmTarget = "1.8"
|
||||
// }
|
||||
kotlinOptions{
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
@ -78,24 +81,6 @@ dependencies {
|
||||
implementation ("jp.wasabeef:glide-transformations:4.3.0")
|
||||
|
||||
|
||||
//提取图片主色
|
||||
// implementation ("androidx.palette:palette:1.0.0")
|
||||
|
||||
//动画
|
||||
// implementation ("com.airbnb.android:lottie:6.5.0")
|
||||
|
||||
//----------media3
|
||||
// implementation("androidx.media3:media3-exoplayer:1.4.1")
|
||||
// implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
|
||||
// implementation("androidx.media3:media3-session:1.4.1")
|
||||
// implementation("androidx.media3:media3-ui:1.4.1")
|
||||
// implementation ("androidx.media3:media3-database:1.4.1")
|
||||
//----------media3
|
||||
|
||||
|
||||
|
||||
// implementation ("com.geyifeng.immersionbar:immersionbar:3.2.2")
|
||||
// implementation ("com.geyifeng.immersionbar:immersionbar-components:3.2.2")
|
||||
|
||||
|
||||
//------------------firebase
|
||||
@ -103,4 +88,26 @@ 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: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")
|
||||
}
|
||||
@ -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.player"
|
||||
"package_name": "com.offline.music.playermp3"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyCp3XR60onMqiGj9pD8ADmrDEOOn__sQDk"
|
||||
"current_key": "AIzaSyDohnv8AScCd1A7RTR-6LLLtQcE7EuJmIw"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
|
||||
@ -17,9 +17,9 @@
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/logo"
|
||||
android:icon="@mipmap/music_logo"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/logo"
|
||||
android:roundIcon="@mipmap/music_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.MusicApp"
|
||||
tools:targetApi="31">
|
||||
|
||||
@ -2,6 +2,14 @@ package com.offline.music.player;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
import com.applovin.sdk.AppLovinMediationProvider;
|
||||
import com.applovin.sdk.AppLovinSdk;
|
||||
import com.applovin.sdk.AppLovinSdkConfiguration;
|
||||
import com.applovin.sdk.AppLovinSdkInitializationConfiguration;
|
||||
|
||||
public class MusicApplication extends Application {
|
||||
|
||||
@ -10,7 +18,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) {
|
||||
MusicApplication.visitorData = visitorData;
|
||||
@ -25,6 +36,7 @@ public class MusicApplication extends Application {
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
myApplication = this;
|
||||
InitializeMax();
|
||||
// Sp.init(this);
|
||||
// RemoteConfigJava.getInstance().init(this);
|
||||
// ObjectBoxManager.init(this);
|
||||
@ -36,5 +48,19 @@ public class MusicApplication extends Application {
|
||||
// });
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.offline.music.player.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
@ -14,6 +15,8 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
import com.offline.music.player.max.onAdAfterAction;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -22,13 +25,13 @@ import java.util.List;
|
||||
|
||||
public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragmentAdapter.ViewHolder> {
|
||||
|
||||
private Context context;
|
||||
private Activity context;
|
||||
private List<AudioItem> audioFiles = new ArrayList<>();
|
||||
private AudioItem audioItem;
|
||||
private OnOptionClickListener onOptionClickListener;;
|
||||
private String newName;
|
||||
|
||||
public A_ImportFragmentAdapter(Context context,String newName) {
|
||||
public A_ImportFragmentAdapter(Activity context, String newName) {
|
||||
this.context = context;
|
||||
this.newName = newName;
|
||||
}
|
||||
@ -50,10 +53,15 @@ public class A_ImportFragmentAdapter extends RecyclerView.Adapter<A_ImportFragme
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
intent.putExtra("newName",newName);
|
||||
context.startActivity(intent);
|
||||
MaxManager.startShowMaxAd(context, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
intent.putExtra("newName",newName);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.offline.music.player.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
@ -17,6 +18,8 @@ import com.bumptech.glide.Glide;
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.helper.AudioItemDiffCallback;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
import com.offline.music.player.max.onAdAfterAction;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -24,10 +27,10 @@ import java.util.List;
|
||||
|
||||
public class A_InstrumentAdapter extends RecyclerView.Adapter<A_InstrumentAdapter.ViewHolder> {
|
||||
|
||||
private Context context;
|
||||
private Activity context;
|
||||
private List<AudioItem> audioItems = new ArrayList<>();
|
||||
|
||||
public A_InstrumentAdapter(Context context) {
|
||||
public A_InstrumentAdapter(Activity context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@ -54,9 +57,14 @@ public class A_InstrumentAdapter extends RecyclerView.Adapter<A_InstrumentAdapte
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
context.startActivity(intent);
|
||||
MaxManager.startShowMaxAd(context, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.offline.music.player.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.view.LayoutInflater;
|
||||
@ -16,6 +17,8 @@ import com.bumptech.glide.Glide;
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.helper.AudioItemDiffCallback;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
import com.offline.music.player.max.onAdAfterAction;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -23,10 +26,10 @@ import java.util.List;
|
||||
|
||||
public class A_NatureAdapter extends RecyclerView.Adapter<A_NatureAdapter.ViewHolder> {
|
||||
|
||||
private Context context;
|
||||
private Activity context;
|
||||
private List<AudioItem> audioItems = new ArrayList<>();
|
||||
|
||||
public A_NatureAdapter(Context context) {
|
||||
public A_NatureAdapter(Activity context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@ -51,9 +54,14 @@ public class A_NatureAdapter extends RecyclerView.Adapter<A_NatureAdapter.ViewHo
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
context.startActivity(intent);
|
||||
MaxManager.startShowMaxAd(context, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.offline.music.player.adapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
@ -17,6 +18,8 @@ import com.bumptech.glide.Glide;
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.helper.AudioItemDiffCallback;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
import com.offline.music.player.max.onAdAfterAction;
|
||||
import com.offline.music.player.ui.activity.A_PlayActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -24,10 +27,10 @@ import java.util.List;
|
||||
|
||||
public class A_WhiteAdapter extends RecyclerView.Adapter<A_WhiteAdapter.ViewHolder> {
|
||||
|
||||
private Context context;
|
||||
private Activity context;
|
||||
private List<AudioItem> audioItems = new ArrayList<>();
|
||||
|
||||
public A_WhiteAdapter(Context context) {
|
||||
public A_WhiteAdapter(Activity context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@ -55,9 +58,14 @@ public class A_WhiteAdapter extends RecyclerView.Adapter<A_WhiteAdapter.ViewHold
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
context.startActivity(intent);
|
||||
MaxManager.startShowMaxAd(context, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
Intent intent = new Intent(context, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
package com.offline.music.player.max;
|
||||
|
||||
import com.applovin.mediation.MaxAd;
|
||||
|
||||
public interface MaxListener {
|
||||
void onFail(MaxAd ad);
|
||||
|
||||
void onShowSuccess(MaxAd ad);
|
||||
|
||||
void onHidden();
|
||||
}
|
||||
222
app/src/main/java/com/offline/music/player/max/MaxManager.java
Normal file
222
app/src/main/java/com/offline/music/player/max/MaxManager.java
Normal file
@ -0,0 +1,222 @@
|
||||
package com.offline.music.player.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.player.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<MaxInterstitialAd> adList = new ArrayList<>();
|
||||
|
||||
public static MaxInterstitialAd getAd(List<MaxInterstitialAd> list) {
|
||||
Collections.shuffle(list);
|
||||
for (MaxInterstitialAd ad : list) {
|
||||
if (ad.isReady()) {
|
||||
Log.d(AD_TAG, "isReady");
|
||||
return ad;
|
||||
}
|
||||
}
|
||||
Log.d(AD_TAG, "no Ready");
|
||||
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<MaxInterstitialAd> 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();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package com.offline.music.player.max;
|
||||
|
||||
import com.applovin.mediation.MaxAd;
|
||||
import com.applovin.mediation.nativeAds.MaxNativeAdLoader;
|
||||
|
||||
public interface NativeMaxListener {
|
||||
void onLoaded(MaxAd ad, MaxNativeAdLoader maxNativeAdLoader);
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
package com.offline.music.player.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.player.MusicApplication
|
||||
|
||||
|
||||
object WelComManager {
|
||||
|
||||
private lateinit var timer: CountDownTimer
|
||||
|
||||
private var need_Show = true
|
||||
|
||||
private lateinit var lists: List<MaxInterstitialAd>
|
||||
|
||||
|
||||
|
||||
@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")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package com.offline.music.player.max;
|
||||
|
||||
public interface onAdAfterAction {
|
||||
|
||||
void onAction();
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package com.offline.music.player.max;
|
||||
|
||||
public interface onAdStatusListener {
|
||||
|
||||
void onAdStatus(int type);
|
||||
}
|
||||
@ -16,6 +16,8 @@ import com.offline.music.player.adapter.A_HomeViewPagerAdapter;
|
||||
import com.offline.music.player.databinding.ActivityAhomeBinding;
|
||||
import com.offline.music.player.databinding.HomeTabCustomBinding;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
import com.offline.music.player.max.onAdAfterAction;
|
||||
import com.offline.music.player.service.MusicPlayerForegroundService;
|
||||
|
||||
import java.util.Locale;
|
||||
@ -38,7 +40,6 @@ public class A_HomeActivity extends BaseActivity<ActivityAhomeBinding> {
|
||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||
musicService = ((MusicPlayerForegroundService.MusicBinder) service).getService(); // 获取服务实例
|
||||
isBound = true; // 服务已绑定
|
||||
Log.d("A_HomeActivity", "isBound");
|
||||
updatePlayButtonState(); // 更新播放按钮状态
|
||||
updateProgress(); // 启动进度更新
|
||||
observeIsPlaying(); // 观察播放状态变化
|
||||
@ -54,6 +55,8 @@ public class A_HomeActivity extends BaseActivity<ActivityAhomeBinding> {
|
||||
|
||||
@Override
|
||||
protected void onCreateInit() {
|
||||
|
||||
MaxManager.onLoadAd();
|
||||
Intent serviceIntent = new Intent(this, MusicPlayerForegroundService.class);
|
||||
startService(serviceIntent); // 启动音乐播放服务
|
||||
bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); // 绑定服务
|
||||
@ -64,10 +67,15 @@ public class A_HomeActivity extends BaseActivity<ActivityAhomeBinding> {
|
||||
vb.homeContainer.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
AudioItem audioItem = musicService.getAudioItem();
|
||||
Intent intent = new Intent(A_HomeActivity.this, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
startActivity(intent);
|
||||
MaxManager.startShowMaxAd(A_HomeActivity.this, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
AudioItem audioItem = musicService.getAudioItem();
|
||||
Intent intent = new Intent(A_HomeActivity.this, A_PlayActivity.class);
|
||||
intent.putExtra("Path", audioItem);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
setupProgressBar(); // 设置进度条
|
||||
|
||||
@ -33,6 +33,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.offline.music.player.R;
|
||||
import com.offline.music.player.databinding.ActivityAplayBinding;
|
||||
import com.offline.music.player.javabean.A_data.AudioItem;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
import com.offline.music.player.max.onAdAfterAction;
|
||||
import com.offline.music.player.service.MusicPlayerForegroundService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -91,6 +93,7 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
|
||||
|
||||
@Override
|
||||
protected void onCreateInit() {
|
||||
MaxManager.onLoadAd();
|
||||
textViews.add(vb.songTitle);
|
||||
textViews.add(vb.artistAlbumText);
|
||||
textViews.add(vb.current);
|
||||
@ -177,7 +180,14 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
|
||||
@Override
|
||||
protected void onInitClick() {
|
||||
vb.songSeekbar.setOnSeekBarChangeListener(new SeekBarListener()); // 设置进度条监听
|
||||
vb.repeatButton.setOnClickListener(v -> showTimerDialog()); // 设置定时器按钮的点击事件
|
||||
vb.repeatButton.setOnClickListener(v -> {
|
||||
MaxManager.startShowMaxAd(A_PlayActivity.this, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
showTimerDialog();
|
||||
}
|
||||
});
|
||||
}); // 设置定时器按钮的点击事件
|
||||
vb.prevButton.setOnClickListener(v -> toggleBackground()); // 设置切换背景按钮的点击事件
|
||||
}
|
||||
|
||||
@ -193,20 +203,30 @@ public class A_PlayActivity extends BaseActivity<ActivityAplayBinding> {
|
||||
// 设置播放按钮的点击事件
|
||||
private void setupPlayButtonClickListener() {
|
||||
vb.playButton.setOnClickListener(v -> {
|
||||
if (isBound && musicService != null) {
|
||||
// 根据播放状态切换播放/暂停
|
||||
if (Boolean.TRUE.equals(musicService.getIsPlaying().getValue())) {
|
||||
musicService.pauseAudio();
|
||||
} else {
|
||||
musicService.resumeAudio();
|
||||
}
|
||||
}
|
||||
if (musicService != null) {
|
||||
musicService.startUpdatingProgress();
|
||||
}
|
||||
MaxManager.startShowMaxAd(A_PlayActivity.this, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
if (isBound && musicService != null) {
|
||||
// 根据播放状态切换播放/暂停
|
||||
if (Boolean.TRUE.equals(musicService.getIsPlaying().getValue())) {
|
||||
musicService.pauseAudio();
|
||||
} else {
|
||||
musicService.resumeAudio();
|
||||
}
|
||||
}
|
||||
if (musicService != null) {
|
||||
musicService.startUpdatingProgress();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
vb.backButton.setOnClickListener(v -> finish()); // 返回按钮点击事件
|
||||
vb.backButton.setOnClickListener(v -> MaxManager.startShowMaxAd(this, new onAdAfterAction() {
|
||||
@Override
|
||||
public void onAction() {
|
||||
finish();
|
||||
}
|
||||
})); // 返回按钮点击事件
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import android.view.View;
|
||||
|
||||
import com.offline.music.player.databinding.ActivityAsettingBinding;
|
||||
import com.offline.music.player.helper.SettingUtil;
|
||||
import com.offline.music.player.max.MaxManager;
|
||||
|
||||
public class A_SettingActivity extends BaseActivity<ActivityAsettingBinding> {
|
||||
|
||||
@ -15,7 +16,7 @@ public class A_SettingActivity extends BaseActivity<ActivityAsettingBinding> {
|
||||
|
||||
@Override
|
||||
protected void onCreateInit() {
|
||||
|
||||
MaxManager.onLoadAd();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -5,11 +5,17 @@ import android.os.CountDownTimer;
|
||||
import android.view.View;
|
||||
|
||||
import com.offline.music.player.databinding.ActivityAsplashBinding;
|
||||
import com.offline.music.player.max.WelComManager;
|
||||
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
|
||||
|
||||
public class A_SplashActivity extends BaseActivity<ActivityAsplashBinding> {
|
||||
|
||||
private static final int SPLASH_TIME_OUT = 1500;
|
||||
private static final int SPLASH_TIME_OUT = 15000;
|
||||
private CountDownTimer countDownTimer;
|
||||
|
||||
@Override
|
||||
@ -46,25 +52,24 @@ public class A_SplashActivity extends BaseActivity<ActivityAsplashBinding> {
|
||||
|
||||
public void intData() {
|
||||
|
||||
countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, 100) {
|
||||
|
||||
countDownTimer = WelComManager.initTimer(this, SPLASH_TIME_OUT, new Function1<Long, Unit>() {
|
||||
@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<Unit>() {
|
||||
@Override
|
||||
public void onFinish() {
|
||||
public Unit invoke() {
|
||||
vb.progressBar.setProgress(100);
|
||||
enterHome();
|
||||
return null;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
countDownTimer.start();
|
||||
|
||||
}
|
||||
|
||||
@ -79,4 +84,13 @@ public class A_SplashActivity extends BaseActivity<ActivityAsplashBinding> {
|
||||
finish();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (countDownTimer != null) {
|
||||
countDownTimer.cancel();
|
||||
countDownTimer = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -38,9 +38,9 @@ public class A_HomeFragment extends BaseFragment<FragmentAHomeBinding> {
|
||||
Vb.recyclerViewThird.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
|
||||
|
||||
// 初始化适配器
|
||||
instrumentAdapter = new A_InstrumentAdapter(requireContext());
|
||||
whiteAdapter = new A_WhiteAdapter(requireContext());
|
||||
natureAdapter = new A_NatureAdapter(requireContext());
|
||||
instrumentAdapter = new A_InstrumentAdapter(requireActivity());
|
||||
whiteAdapter = new A_WhiteAdapter(requireActivity());
|
||||
natureAdapter = new A_NatureAdapter(requireActivity());
|
||||
|
||||
// 设置适配器到 RecyclerView
|
||||
Vb.recyclerViewFirst.setAdapter(instrumentAdapter);
|
||||
|
||||
@ -57,7 +57,7 @@ public class A_ImportFragment extends BaseFragment<FragmentAImportBinding> {
|
||||
@Override
|
||||
protected void initView() {
|
||||
viewModel = new ViewModelProvider(this).get(A_VMImport.class);
|
||||
adapter = new A_ImportFragmentAdapter(requireContext(),newName);
|
||||
adapter = new A_ImportFragmentAdapter(requireActivity(),newName);
|
||||
|
||||
setupRecyclerView();
|
||||
// observeAudioFiles();
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
android:id="@+id/splash_image"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="150dp"
|
||||
android:src="@mipmap/logo"
|
||||
android:src="@mipmap/music_logo"
|
||||
app:layout_constraintBottom_toTopOf="@+id/splash_title"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 267 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/music_logo.png
Normal file
BIN
app/src/main/res/mipmap-xxxhdpi/music_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 454 KiB |
@ -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
|
||||
@ -12,5 +12,6 @@ plugins {
|
||||
buildscript {
|
||||
dependencies {
|
||||
classpath("io.objectbox:objectbox-gradle-plugin:4.0.3")
|
||||
classpath ("com.applovin.quality:AppLovinQualityServiceGradlePlugin:+")
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -3,6 +3,7 @@ pluginManagement {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
maven { url = uri("https://artifacts.applovin.com/android") }
|
||||
}
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
@ -10,6 +11,9 @@ 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") }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user