У меня есть простое webview приложение в котором встроенный сайт а точнее функционал написанный на js он находится в одной активности. Есть вторая активность в которой при открытии показывается межстраничная реклама и при закрытии рекламы идет возврат на предыдущую активность. Вот MainActivity В котором основной функционал
public class MainActivity extends AppCompatActivity {
WebView webView;
private static final String PREFS_COUNT = "MyPrefsFile";
private static final String CLICK_COUNT_KEY = "clickCount";
private int clickCount = 0;
private SharedPreferences prefs;
private static final String JS_INTERFACE_NAME = "AndroidInterface";
@SuppressLint("WrongViewCast")
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
prefs = getSharedPreferences(PREFS_COUNT, MODE_PRIVATE);
clickCount = prefs.getInt(CLICK_COUNT_KEY, 0);
WebSettings webSettings = webView.getSettings();
webView.getSettings().setJavaScriptEnabled(true);
webView.clearCache(true);
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
webView.setDrawingCacheEnabled(true);
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccess(true);
webSettings.setDatabaseEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setLoadWithOverviewMode(true);
final Activity activity = this;
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
// Redirect to deprecated method, so you can use it in all SDK versions
onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
webView.loadUrl("file:///android_asset/error.html");
}
});
// Добавляем интерфейс для взаимодействия с JavaScript
webView.addJavascriptInterface(new WebAppInterface(), JS_INTERFACE_NAME);
webView.loadUrl("file:///android_asset/index.html");
}
// Класс для взаимодействия между WebView и JavaScripts
public class WebAppInterface {
@JavascriptInterface
public void shareContent(String content) {
// Выполните здесь свой код для обработки и передачи информации в социальные сети
Intent intent = new Intent(
Intent.ACTION_SEND
);
intent.setType("text/plain");
String Body = content;
String Sub = "https://play.google.com/store/apps/details?id=com.buratinoapps.cryptocurrency.faucet.rotator";
intent.putExtra(Intent.EXTRA_TEXT, Body);
intent.putExtra(Intent.EXTRA_TEXT, Sub);
startActivity(Intent.createChooser(intent, "Share using"));
Toast.makeText(MainActivity.this, "Поделиться: " + content, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void showedAds() {
clickCount++;
if (clickCount == 1 || clickCount % 30 == 0) {
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(CLICK_COUNT_KEY, clickCount);
editor.apply();
Toast.makeText(MainActivity.this, "OK", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, AdsActivity.class);
startActivityForResult(intent, 123);
finish();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 123) { // Здесь 123 - это код запроса, указанный в startActivityForResult()
// Обработайте результат из AdsActivity, если необходимо
}
}
}
Вторая активность в которой показывается реклама
public class AdsActivity extends AppCompatActivity {
private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/1033173712";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ads);
// Initialize the Mobile Ads SDK.
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {}
});
loadAd();
}
private void loadAd() {
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(AdsActivity.this, AD_UNIT_ID, adRequest,
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
// The mInterstitialAd reference will be null until
// an ad is loaded.
Log.i("Loaded", "onAdLoaded");
interstitialAd.show(AdsActivity.this);
interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Called when fullscreen content failed to show.
super.onAdFailedToShowFullScreenContent(adError);
Log.d("TAG", "The ad failed to show.");
}
@Override
public void onAdDismissedFullScreenContent() {
// Called when fullscreen content is dismissed.
super.onAdDismissedFullScreenContent();
Log.d("TAG", "The ad was dismissed.");
Intent intent = new Intent(AdsActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
@Override
public void onAdShowedFullScreenContent() {
// Called when fullscreen content is shown.
// Make sure to set your reference to null so you don't
// show it a second time.
super.onAdShowedFullScreenContent();
Log.d("TAG", "The ad was shown.");
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
// Handle the error
Log.i("FailedError", loadAdError.getMessage());
}
});
}
}
Вкратце поясняю почему мною было решено использовать вторую активность для показа рекламы. Суть такова мне нужно что бы при каждом 30 нажатии на кнопку показывалась реклама, но так как реклама показывается только при открытии активности то сделать это невозможно зациклив показ рекламы, за месть этого было принято решение при каждом 30 нажатии открывать новую активность. А сама проблема заключается в том что у меня приложение которое генерирует рандомные цвета и в случае когда идет показ рекламы и возврат назад то цвет или цвета которые были сгенерированы не сохраняются, поэтому мне нужно после того как пользователю будет показана реклама он будет возвращаться назад к предыдущей активносте без ее пересоздания