Android + HTML5(LocalStorage)+ Admob:Bug?

时间:2012-01-13 11:48:43

标签: android html5 cordova admob local-storage

我正在开发一个使用javascript / HTML5的Phonegap应用程序(Android) localStorage的。该应用程序工作正常,但是当我添加Admob时 应用程序,localStorage无法正常工作。含义 当应用程序强制关闭或手机时,存储的值将被删除 重启。

public class TestActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");

        // ADMOB: If comment, work.
        /*
        LinearLayout layout = super.root;
        AdView adView = new AdView(this, AdSize.BANNER, **MY_CODE_ADMOB**);
        layout.addView(adView);
        AdRequest request = new AdRequest();
        adView.loadAd(request);
        */
    }
}        

谢谢!

2 个答案:

答案 0 :(得分:10)

您必须将启动广告的代码延迟几秒......以下对我有效。

public class youActivity extends DroidGap {
private Handler mHandler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.loadUrl("file:///android_asset/www/index.html");
    mHandler.postDelayed(new Runnable() {
        public void run() {
            doStuff();
        }
    }, 5000); 
}
private void doStuff() {
    final String MY_AD_UNIT_ID = "yourAD_UNIT_ID";
    AdView adView; 
    // Create the adView 
    adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID); 
    LinearLayout layout = super.root; // this is the only change from the sample 
    // Add the adView to it 
    layout.addView(adView); 
    // Initiate a generic request to load it with an ad 
    adView.loadAd(new AdRequest());
}
}

答案 1 :(得分:0)

我在使用Phonegap / Cordova和一个sqlite文件将AdMob与存储一起工作时遇到了同样的问题,我的数据库被从apk复制到数据库位置。 我试过这里提到的延迟解决方案。我的观察是,要使用正确的数据访问数据库,需要在创建AdRequest之前完成window.openDatabase("xxx", "1.0", "xxx", 1000000);。这不是我的解决方案,因为在另一个页面上再次打开连接会导致数据库为空。

我解决此问题的方法是使用https://github.com/lite4cordova/Cordova-SQLitePlugin处的插件。它的工作方式与websql完全相同,但以不同的方式打开数据库(如果已经编写了查询,则重写不多)。如果您使用以下方式打开它:

var db = window.sqlitePlugin.openDatabase({name: "DB"});

它将使用DB.db文件而不是默认的0000000000000001.db。这可以防止与AdMob发生冲突。需要注意的两件事:

  1. 插件需要在设备上完成而不仅仅是文档 加载以打开数据库。

  2. 如果您正在处理您发送的sqlite文件 使用apk,请务必调整将其复制到的位置。