I'm developing an application for Android, using Phonegap ( also known as Apache Cordova nowadays) and I plan on having ads from Google Admob. I have the following piece of code:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
adView = new AdView(this, AdSize.BANNER, AdMob_Ad_Unit);
adView.setMinimumHeight(75);
adView.setMinimumWidth(320);
LinearLayout layout = super.root;
layout.addView(adView);
layout.setHorizontalGravity(android.view.Gravity.CENTER_HORIZONTAL); //This centers the ads in landscape mode.
adView.loadAd(new AdRequest());
}
This successfully displays an ad on the bottom of my page but the AdView covers part of my WebView... I tried solving the problem but my skills on the java part of phonegap are very limited :-/
Related
Hi I am using AdMoB for showing banner ad in YouTube app which retrieves Video From Channel . For showing ad I used Java Code rather than XML. Now I am facing one problem which is my Banner is shown behind the Videos after the gets loaded. Can someone please help me to find out a way to show the ad front of the Videos. This is the code i used
adView = new AdView(this, AdSize.BANNER, "caXXXXXXXXXXXX");
FrameLayout layout = (FrameLayout)findViewById(R.id.content_frame);
layout.addView(adView);
#SuppressWarnings("deprecation")
FrameLayout.LayoutParams adsParams = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
adView.loadAd(new AdRequest());
Try this way.
This is the xml code of the banner, you can place it wherever you want in your activity xml layout:
<com.google.ads.AdView android:id="#+id/banner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="YOUR UNIT ID HERE"
ads:adSize="BANNER"
ads:loadAdsOnCreate="true"/>
Then inside <application> tag in AndroidManifest.xml declare the AdActivity:
<activity
android:name="com.google.ads.AdActivity"
android:label="#string/app_name" >
And finnaly get the reference on your activity of banner and start request ads from google:
AdView ad = (AdView) findViewById(R.id.banner);
ad.loadAd(new AdRequest());
What layout are you using? To get ads on top of my Libgdx projects, I had to use a RelativeLayout and specify put things together in a specific order. Here's an example from my code:
// Create the main/content layout
RelativeLayout layout = new RelativeLayout(this);
// This is just a View that LibGDX draws into, it could be any View.
View gameView = initializeForView(new SuperAwesomeGameIMade(AndroidLauncher.this));
// Add it to the new content layout.
layout.addView(gameView);
// Create and setup the AdMob View
mAdView = new AdView(AndroidLauncher.this);
mAdView.setAdSize(AdSize.SMART_BANNER);
mAdView.setAdUnitId("your ad unit here");
// Create the ad load request using the AdRequest Builder
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
adRequestBuilder.addTestDevice("your test device ID so you don't get banned!");
mAdView.setVisibility(View.GONE); // Change to View.Visible to show ads
mAdView.loadAd(adRequestBuilder.build());
// Setup the AdView with new layout params so it can "float" on the other one.
RelativeLayout.LayoutParams adParams =
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layout.addView(mAdView, adParams);
// Set the content view as this new relative layout
setContentView(layout);
Hope that gets you pointed in the right direction.
I recently migrated my project from AdMob SDK to Google service Ads, however I got a tiny problem with the Google service Ads.
I have a banner ad view in the activity, and I would dynamically adjust the buttons in the layout depending on whether or not an ad is loaded. It worked fine when I used AdMob SDK, but now with Google service Ads, the banner is always reserved there with blank before the ad is loaded. And if the ad cannot be loaded (say without network), the blank view is there, which is rather ugly! This is also why I would like to adjust the layout dynamically...
Did I missed anything while I changed the code? Thank you for help!
Here is an excerpt of the java code and layout file:
Java:
import com.google.android.gms.ads.*;
...
public class MyActivity extends Activity {
...
#Override
public void onCreate(Bundle savedInstanceState) {
...
AdView adView = (AdView)findViewById(R.id.ad);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
}
}
Layout XML:
...
<com.google.android.gms.ads.AdView
android:id="#+id/ad"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adUnitId="AD_PUB_ID"
ads:adSize="BANNER"/>
</RelativeLayout>
You can add an AdListener, and make the ad visible only when it receives an ad.
The code looks like this:
final AdView ad = new AdView(context);
ad.setAdUnitId(publisherId);
ad.setAdSize(AdSize.SMART_BANNER);
final AdListener listener = new AdListener() {
#Override
public void onAdLoaded() {
ad.setVisibility(View.VISIBLE);
super.onAdLoaded();
}
};
ad.setAdListener(listener);
ad.setVisibility(View.GONE);
adParent.addView(ad);
ad.loadAd(new AdRequest.Builder().build());
Since there is/was an issue, that an AdMob ad generates an ANR, when it is destroyed when still loading. I normally also check on the visibility of the ad, before calling pause() or destroy().
Be careful because this is against Google Ad policy to have the ad banner pops up like that.
I received a mail from Google a month ago and had to change that behavior to avoid my app to be banned from the Play Store.
A lot of developers are receiving the same mail.
I am trying to set the AdMob banner ABOVE the Tabs in a TabsActivity:
public class FundsReportTabsActivity extends TabsActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AdView adView = new AdView(activity, AdSize.BANNER, AD_UNIT_ID);
// Lookup your LinearLayout assuming it’s been given
// the attribute android:id="#+id/mainLayout"
// Add the adView to it
getTabHost().addView(adView, 0, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
AdRequest adRequest = new AdRequest();
adRequest.addTestDevice("E0154BC3F11C778234254195FA1164F");
adRequest.setTesting(true);
// Initiate a generic request to load it with an ad
adView.loadAd(adRequest);
}
However, the banner does not appear, even though I have this logcat:
09-29 22:23:09.755: INFO/Ads(16158): onReceiveAd()
and don't see any related warning/error.
Does anyone have an idea? Thanks!
Check your logcat for a warning or verbose saying no ads in inventory. Some times when you first sign up or are using admob it takes some time before the ads start appearing. Also make sure you have provided a linear layout for the ad. And if you watch the logcat file during the activity with the ad you will see a content containing items that pertain to the ad. I know i had trouble with admob at first. The same issue you are having. It just took some time.
I have successfully gotten AdMob test ads to show up in a LinearLayout, but if I change to a TableLayout, they do not show up. No errors show in logcat.
This is what works:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AdRequest request = new AdRequest();
request.setTesting(true);
request.addTestDevice(AdRequest.TEST_EMULATOR);
AdView adview = new AdView(this, AdSize.BANNER, [admob id deleted for posting on stackoverflow]);
// all code before this point is the same in both examples
LinearLayout layout = new LinearLayout(this);
layout.addView(adview);
// all code after this point is the same in both examples
this.setContentView(layout);
adview.loadAd(request);
}
I get a nice little banner ad at the top of the emulator screen that says "Success! Now you are ready to travel through the App Galaxy [Google logo]". So far so good. But it does not appear if I change it to a TableLayout, as follows:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AdRequest request = new AdRequest();
request.setTesting(true);
request.addTestDevice(AdRequest.TEST_EMULATOR);
AdView adview = new AdView(this, AdSize.BANNER, [admob id deleted for posting on stackoverflow]);
// all code before this point is the same in both examples
TableLayout layout = new TableLayout(this);
TableRow row = new TableRow(this);
row.addView(adview);
layout.addView(row);
// all code after this point is the same in both examples
this.setContentView(layout);
adview.loadAd(request);
}
I get no errors in LogCat. In both instances (LinearLayout or TableLayout) all I get in LogCat from Admob is two informational messages:
Ads Received ad url: <"url": "[URL to the 'App Galaxy' test ad]">
Ads onRecievedAd()
That's it. No complaints about not having enough space, which seems common from other posts. All I get is a black screen. If I add in another TableRow afterward, containing a TextView, that TextView shows up 50px below the top of the screen, as if the ad were there.
Any ideas on stuff to try to get it to show up? I've already written an app based on a TableLayout and if possible I'd rather not have to redo it in LinearLayout(s) . . .
I guess the parent of the AdView should have the property:
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
I've tried to make a test app to see how admob works. But almost every time "No ad to show". Here is my source code:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AdView adView = new AdView(this, AdSize.BANNER, "xxxxxxxxxxxxxxxxx");
adView.setAdListener(this);
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
layout.addView(adView);
adView.loadAd(new AdRequest());
}
but in a hour, it appeared only once. Am I doing something wrong?
It works fine but you should wait for a moment at the first time , if you want just to test you can use the test mode by adding this line (new AdRequest()).setTesting(true);
Make sure that you are using the general key and not the debug key for the AdMob API