Sermyagin

Рейтинг
39
Регистрация
11.06.2023
package com;

import androidx.multidex.MultiDexApplication;
import com.yandex.mobile.ads.common.MobileAds;

public class MyApplication extends MultiDexApplication {

@Override
public void onCreate() {
super.onCreate();

// Check if the ad-free status is set
boolean isAdFree = getSharedPreferences(KEY.SHARED_PREFERENCES_PURCHASES, MODE_PRIVATE)
.getBoolean(KEY.IS_ADFREE_KEY, false);

if (!isAdFree) {
// Initialize Yandex Mobile Ads SDK only if not ad-free
MobileAds.initialize(this, () -> {});
}
}
}

вот код 

package com.view.ads;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.RelativeLayout;

import com.KEY;
import com.R;
import com.yandex.mobile.ads.common.AdRequest;
import com.yandex.mobile.ads.banner.BannerAdSize;
import com.yandex.mobile.ads.banner.BannerAdView;
import com.yandex.mobile.ads.common.InitializationListener;

import java.util.Timer;
import java.util.TimerTask;

public class MyAdsController {

private static Timer bannerRefreshTimer;
private static Handler handler = new Handler();
private static Runnable networkCheckRunnable;

// Define the InitializationListener
private static final InitializationListener initializationListener = new InitializationListener() {
@Override
public void onInitializationCompleted() {
// Empty implementation, no specific actions required.
}

// @Override
// public void onInitializationFailed(String error) {
// Add your code here for what to do when initialization fails.
// }
};

public static void setAdsVisibility(Activity activity) {
SharedPreferences sharedPreferences = activity.getSharedPreferences(KEY.SHARED_PREFERENCES_PURCHASES, Context.MODE_PRIVATE);
boolean isAdFree = sharedPreferences.getBoolean(KEY.IS_ADFREE_KEY, false);

RelativeLayout adContainer = activity.findViewById(R.id.adView_container);
if (isAdFree) {
// Hide the ad container if the user has purchased an ad-free version
adContainer.setVisibility(View.GONE);
} else {
// Show the ad container otherwise
adContainer.setVisibility(View.VISIBLE);
// Load and display ads if visible
showBannerAds(activity);
}
}

public static void handleInterstitialAds(final Activity activity) {
// Your code to handle interstitial ads
}

public static void showBannerAds(final Activity activity) {
RelativeLayout layout = activity.findViewById(R.id.adView_container);
if (layout != null) {
BannerAdView adView = new BannerAdView(activity);
BannerAdSize adSize = getAdSize(activity);
adView.setAdSize(adSize);
adView.setAdUnitId("R-M-2631210-1"); // Set your ad unit ID

layout.removeAllViews(); // Clear previous ads if any
layout.addView(adView);
adView.loadAd(getAdRequest());

startBannerRefreshTimer(activity, adView);
}
}

private static AdRequest getAdRequest() {
return new AdRequest.Builder().build();
}

private static BannerAdSize getAdSize(Context context) {
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int screenWidth = displayMetrics.widthPixels;

// Set the banner height manually (e.g., 50dp)
int bannerHeightDp = 45;
int bannerHeightPx = (int) (bannerHeightDp * displayMetrics.density);
return BannerAdSize.inlineSize(context, screenWidth, bannerHeightPx);
}

private static void startBannerRefreshTimer(final Activity activity, final BannerAdView adView) {
if (bannerRefreshTimer != null) {
stopBannerRefreshTimer();
}

bannerRefreshTimer = new Timer();
bannerRefreshTimer.schedule(new TimerTask() {
@Override
public void run() {
activity.runOnUiThread(() -> refreshBanner(adView));
}
}, 31000, 31000); // Refresh every 31 seconds
}

private static void refreshBanner(BannerAdView adView) {
adView.loadAd(getAdRequest());
}

public static void stopBannerRefreshTimer() {
if (bannerRefreshTimer != null) {
bannerRefreshTimer.cancel();
bannerRefreshTimer = null;
}
}

public static void releaseAdsCallbacks() {
stopBannerRefreshTimer();
}

public static void releaseAds_Callbacks() {
if (handler != null) {
handler.removeCallbacksAndMessages(null);
}
}

public static void listenNetworkChangeToRequestAdsFull(Activity activity) {
if (networkCheckRunnable == null) {
networkCheckRunnable = new RCheckNetworkLoadAdsInterstitial(activity);
}

handler.post(networkCheckRunnable);
}

static class RCheckNetworkLoadAdsInterstitial implements Runnable {
private final Activity activity;

public RCheckNetworkLoadAdsInterstitial(Activity activity) {
this.activity = activity;
}

@Override
public void run() {
if (CheckInternet.isNetworkAvailable(activity)) {
setAdsVisibility(activity);
}

handler.postDelayed(this, 31000); // Check network status every 31 seconds
}
}
}

и xml 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom|center"
android:background="#ffffff"
android:orientation="vertical">



<RelativeLayout
android:id="@+id/adView_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
></RelativeLayout>


</LinearLayout>

во всем приложении баннер внизу обновление каждые 31 секунд.

Посмотри на стату баннера 
50 049 запросов
5 618 показов

У меня вопрос почему такой коэффициент!

Помню первый сайт делал на нем с доменом верхнего уровня лет 15 назад потом узнал про рег.ру и ушёл оттуда. 
Я использую chatgpt.com волне справляется с 500 строками больше пока не нужно... Если нужно больше тогда уже лучше нанять фрилансера профессионального.
Dambo #:

У СЗ стаж не идет трудовой для пенсии.  Кому то пофиг, но когда подойдет пенсионный срок, пофиг уже не будет. 

Только это и держит меня в РСЯ как физика. 

Предложения засчитывать предпринимательскую деятельность в статусе самозанятого как страховой стаж пока законодательно не закреплены (по состоянию на август 2024 года). Поэтому если вы официально не трудоустроены и обеспечиваете себя работой только как плательщик НПД, стаж для пенсии не копится. Об этом говорится в Письме Министерства труда и соцзащиты РФ от 9.04.2024 № 21-1/ООГ-3246.

Есть люди кто уже на пенсии...

Сделал себе СЗ аккаунт и получаю на Т-банк 9, 10 числа + налог уменьшился советую!
Чтобы инвесткопилка приносила хотя бы 1 к в день нужен депозит 2 ляма смешно конечно так мне поддержка ответила, и не снять их ничего не сделать так сказать и не успеть пожить...😓
TonyBlackberry #:

Инвестируйте в холодильник. Голодным точно не останитесь.

На еду пока денег хватает...

Delysid #:

Мужики за Самсунг, нормальные девахи за Самсунг! 😀

Я всегда за последнюю версию андроид так как разработчик 

Я вообще не знаю что такое айфон поэтому за Самсунг 
Всего: 264