fix: app crash when a timer callback throws exception on main thread; feat: umeng ads
This commit is contained in:
@@ -10,7 +10,6 @@ import android.widget.ImageView;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.flurry.android.FlurryAgent;
|
||||
import com.google.android.gms.ads.MobileAds;
|
||||
import com.raizlabs.android.dbflow.config.DatabaseConfig;
|
||||
import com.raizlabs.android.dbflow.config.FlowConfig;
|
||||
import com.raizlabs.android.dbflow.config.FlowManager;
|
||||
@@ -97,7 +96,6 @@ public class App extends MultiDexApplication {
|
||||
}
|
||||
setupDrawableImageLoader();
|
||||
TimedTaskScheduler.checkTasksRepeatedlyIfNeeded(this);
|
||||
MobileAds.initialize(this, Constants.ADMOB_APP_ID);
|
||||
}
|
||||
|
||||
private void setupDrawableImageLoader() {
|
||||
|
||||
@@ -6,13 +6,17 @@ package org.autojs.autojs;
|
||||
|
||||
public final class Constants {
|
||||
|
||||
public static final String LOG_TAG_ADMOB = "Admob";
|
||||
public static final String ADMOB_APP_ID = "ca-app-pub-5495978608535144~9896346219";
|
||||
public static final String ADMOB_SPLASH_BANNER_ID = "ca-app-pub-5495978608535144/3281269730";
|
||||
public static final int AD_TYPE_RANDOM = 0;
|
||||
public static final int AD_TYPE_NEWS = 1;
|
||||
public static final int AD_TYPE_SOCIAL = 2;
|
||||
public static final int AD_TYPE_ANIMATION = 3;
|
||||
public static final int AD_TYPE_GAMES = 4;
|
||||
|
||||
public static final int UMENG_ID_NEWS = 36787;
|
||||
public static final int UMENG_ID_SOCIAL = 36785;
|
||||
public static final int UMENG_ID_ANIMATION = 36781;
|
||||
public static final int UMENG_ID_GAMES = 36615;
|
||||
|
||||
public static final int[] UMENG_IDS = {UMENG_ID_NEWS, UMENG_ID_SOCIAL, UMENG_ID_ANIMATION, UMENG_ID_GAMES};
|
||||
|
||||
public static final String ADMOB_INTERSTITIAL_ID = "ca-app-pub-5495978608535144/7282625313";
|
||||
public static final String ADMOB_APK_BUILDER_REWARD_ID = "ca-app-pub-5495978608535144/2977306962";
|
||||
public static final String ADMOB_BANNER_TEST_ID = "ca-app-pub-3940256099942544/6300978111";
|
||||
public static final String ADMOB_INTERSTITIAL_TEST_ID = "ca-app-pub-3940256099942544/1033173712";
|
||||
public static final String ADMOB_REWARD_VIDEO_TEST_ID = "ca-app-pub-3940256099942544/5224354917";
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public class Pref {
|
||||
}
|
||||
|
||||
public static boolean shouldShowAd() {
|
||||
if(isFirstDay()){
|
||||
if(isFirstDay() && !BuildConfig.DEBUG){
|
||||
return false;
|
||||
}
|
||||
String adShowingMode = def().getString(getString(R.string.key_ad_showing_mode), "Default");
|
||||
@@ -116,6 +116,15 @@ public class Pref {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int getAdType(){
|
||||
try {
|
||||
return Integer.parseInt(def().getString(getString(R.string.key_ad_type), String.valueOf(Constants.AD_TYPE_RANDOM)));
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return Constants.AD_TYPE_RANDOM;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isFirstDay() {
|
||||
long firstUsingMillis = def().getLong("firstUsingMillis", -1);
|
||||
if(firstUsingMillis == -1){
|
||||
|
||||
@@ -16,31 +16,24 @@ import android.widget.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.google.android.gms.ads.AdRequest;
|
||||
import com.google.android.gms.ads.MobileAds;
|
||||
import com.google.android.gms.ads.reward.RewardItem;
|
||||
import com.google.android.gms.ads.reward.RewardedVideoAd;
|
||||
import com.google.android.gms.ads.reward.RewardedVideoAdListener;
|
||||
import com.stardust.autojs.project.ProjectConfig;
|
||||
import org.autojs.autojs.BuildConfig;
|
||||
import org.autojs.autojs.Constants;
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.autojs.build.AutoJsApkBuilder;
|
||||
import org.autojs.autojs.build.ApkBuilderPluginHelper;
|
||||
import org.autojs.autojs.storage.file.StorageFileProvider;
|
||||
import org.autojs.autojs.model.script.ScriptFile;
|
||||
import org.autojs.autojs.tool.BitmapTool;
|
||||
import org.autojs.autojs.ui.BaseActivity;
|
||||
import org.autojs.autojs.ui.filechooser.FileChooserDialogBuilder;
|
||||
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectActivity;
|
||||
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectActivity_;
|
||||
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
import com.stardust.util.IntentUtil;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.Click;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.autojs.build.AutoJsApkBuilder;
|
||||
import org.autojs.autojs.build.ApkBuilderPluginHelper;
|
||||
import org.autojs.autojs.model.script.ScriptFile;
|
||||
import org.autojs.autojs.storage.file.StorageFileProvider;
|
||||
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
import org.autojs.autojs.tool.BitmapTool;
|
||||
import org.autojs.autojs.ui.BaseActivity;
|
||||
import org.autojs.autojs.ui.filechooser.FileChooserDialogBuilder;
|
||||
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectActivity;
|
||||
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectActivity_;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
@@ -55,7 +48,7 @@ import io.reactivex.schedulers.Schedulers;
|
||||
* Created by Stardust on 2017/10/22.
|
||||
*/
|
||||
@EActivity(R.layout.activity_build)
|
||||
public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.ProgressCallback, RewardedVideoAdListener {
|
||||
public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.ProgressCallback {
|
||||
|
||||
public static final String EXTRA_SOURCE_FILE = BuildActivity.class.getName() + ".extra_source_file";
|
||||
|
||||
@@ -84,13 +77,10 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
|
||||
private MaterialDialog mProgressDialog;
|
||||
private boolean mIsDefaultIcon = true;
|
||||
private RewardedVideoAd mRewardedVideoAd;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
|
||||
mRewardedVideoAd.setRewardedVideoAdListener(this);
|
||||
}
|
||||
|
||||
@AfterViews
|
||||
@@ -106,9 +96,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
}
|
||||
|
||||
private void loadRewardedVideoAd() {
|
||||
mRewardedVideoAd.loadAd(BuildConfig.DEBUG ? Constants.ADMOB_REWARD_VIDEO_TEST_ID :
|
||||
Constants.ADMOB_APK_BUILDER_REWARD_ID,
|
||||
new AdRequest.Builder().build());
|
||||
|
||||
}
|
||||
|
||||
private void checkApkBuilderPlugin() {
|
||||
@@ -357,61 +345,4 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
mRewardedVideoAd.pause(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
mRewardedVideoAd.resume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mRewardedVideoAd.destroy(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewardedVideoAdLoaded() {
|
||||
mRewardedVideoAd.show();
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewardedVideoAdLoaded");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewardedVideoAdOpened() {
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewardedVideoAdLoaded");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewardedVideoStarted() {
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewardedVideoAdLoaded");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewardedVideoAdClosed() {
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewardedVideoAdLoaded");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewarded(RewardItem rewardItem) {
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewarded: type=" + rewardItem.getType() + ", amount=" + rewardItem.getAmount());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewardedVideoAdLeftApplication() {
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewardedVideoAdLeftApplication");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRewardedVideoAdFailedToLoad(int i) {
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "onRewardedVideoAdFailedToLoad: " + i);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,32 +2,24 @@ package org.autojs.autojs.ui.splash;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.Html;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.gms.ads.AdListener;
|
||||
import com.google.android.gms.ads.AdRequest;
|
||||
import com.google.android.gms.ads.AdSize;
|
||||
import com.google.android.gms.ads.AdView;
|
||||
import com.google.android.gms.ads.InterstitialAd;
|
||||
import com.xcy8.ads.listener.LoadAdListener;
|
||||
import com.xcy8.ads.view.FullScreenAdView;
|
||||
import com.xcy8.ads.view.skipview.OnFullScreenListener;
|
||||
|
||||
import org.autojs.autojs.BuildConfig;
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
import org.autojs.autojs.Constants;
|
||||
import org.autojs.autojs.Pref;
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.ui.BaseActivity;
|
||||
import org.autojs.autojs.ui.main.MainActivity_;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.Click;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/7/7.
|
||||
@@ -50,7 +42,8 @@ public class SplashActivity extends BaseActivity {
|
||||
|
||||
private Handler mHandler;
|
||||
|
||||
private InterstitialAd mInterstitialAd;
|
||||
@ViewById(R.id.full_screen_view)
|
||||
FullScreenAdView mFullScreenAdView;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -62,6 +55,10 @@ public class SplashActivity extends BaseActivity {
|
||||
enterNextActivity();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@AfterViews
|
||||
void afterViews(){
|
||||
fetchSplashAD();
|
||||
}
|
||||
|
||||
@@ -77,7 +74,7 @@ public class SplashActivity extends BaseActivity {
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
enterNextActivityIfNeeded();
|
||||
//enterNextActivityIfNeeded();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -96,48 +93,39 @@ public class SplashActivity extends BaseActivity {
|
||||
|
||||
private void fetchSplashAD() {
|
||||
mAdLoading = true;
|
||||
mHandler.postDelayed(() -> {
|
||||
if (mAdLoading){
|
||||
enterNextActivity();
|
||||
}
|
||||
}, 1500);
|
||||
mInterstitialAd = new InterstitialAd(this);
|
||||
mInterstitialAd.setAdUnitId(BuildConfig.DEBUG ? Constants.ADMOB_INTERSTITIAL_TEST_ID : Constants.ADMOB_INTERSTITIAL_ID);
|
||||
mInterstitialAd.setAdListener(new AdListener() {
|
||||
mFullScreenAdView.setFullScreenListener(this::enterNextActivity);
|
||||
mFullScreenAdView.setLoadAdListener(new LoadAdListener() {
|
||||
@Override
|
||||
public void onAdLoaded() {
|
||||
public void onSuccess() {
|
||||
mAdLoading = false;
|
||||
if(!mAlreadyEnterNextActivity){
|
||||
mInterstitialAd.show();
|
||||
}
|
||||
Log.d(LOG_TAG, "onAdLoadSuccess");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdClosed() {
|
||||
enterNextActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdClicked() {
|
||||
enterNextActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdFailedToLoad(int i) {
|
||||
public void onFailure(String s) {
|
||||
mAdLoading = false;
|
||||
Log.e(LOG_TAG, "onAdLoadFailure: " + s);
|
||||
enterNextActivity();
|
||||
Log.d(Constants.LOG_TAG_ADMOB, "Fail to load interstitial ad: " + i);
|
||||
}
|
||||
|
||||
});
|
||||
mInterstitialAd.loadAd(buildAdRequest());
|
||||
mHandler.postDelayed(() -> {
|
||||
if (mAdLoading) {
|
||||
enterNextActivity();
|
||||
}
|
||||
}, 2000);
|
||||
mFullScreenAdView.loadAd(getAdId(), false);
|
||||
}
|
||||
|
||||
private AdRequest buildAdRequest() {
|
||||
AdRequest.Builder builder = new AdRequest.Builder();
|
||||
if (BuildConfig.DEBUG) {
|
||||
builder.addTestDevice("774E105820188FA387B617ECD279B167");
|
||||
}
|
||||
return builder.build();
|
||||
private String getAdId() {
|
||||
int type = Pref.getAdType();
|
||||
int id = type >= 1 && type <= Constants.UMENG_IDS.length ? Constants.UMENG_IDS[type - 1]
|
||||
: Constants.UMENG_IDS[new Random().nextInt(Constants.UMENG_IDS.length)];
|
||||
return String.valueOf(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mFullScreenAdView.clean();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,10 @@
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.xcy8.ads.view.FullScreenAdView
|
||||
android:id="@+id/full_screen_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
@@ -387,4 +387,6 @@
|
||||
<string name="text_class_or_package_name">类/包名</string>
|
||||
<string name="text_view_docs">查看文档</string>
|
||||
<string name="text_en_import">import</string>
|
||||
<string name="key_ad_type">key_ad_type</string>
|
||||
<string name="text_ad_type_settings">广告类型设置</string>
|
||||
</resources>
|
||||
|
||||
@@ -93,9 +93,13 @@
|
||||
<com.stardust.theme.preference.ThemeColorPreferenceCategory
|
||||
android:layout="@layout/preference_category_custom"
|
||||
android:title="@string/text_ad">
|
||||
<Preference
|
||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
||||
android:defaultValue="0"
|
||||
android:entries="@array/ad_types_keys"
|
||||
android:entryValues="@array/ad_types_values"
|
||||
android:key="@string/key_ad_type"
|
||||
android:layout="@layout/preference_custom"
|
||||
android:title="@string/show_ad"
|
||||
android:title="@string/text_ad_type_settings"
|
||||
/>
|
||||
<com.afollestad.materialdialogs.prefs.MaterialListPreference
|
||||
android:defaultValue="@string/text_default"
|
||||
|
||||
Reference in New Issue
Block a user