HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1120
ようすけHSP3dish android(NDK)でadmob非表示の方法について18解決


ようすけ

リンク

2015/11/20(Fri) 00:59:47|NO.73137

HSP3dish 3.5β2にてandroid向けゲームを作っています。

admob広告表示についてはなんとか実装できたのですが
表示したadmob広告を非表示にする手段は無い物かと悩んでいます。

(理想)
 タイトル画面:下部に広告表示
 ゲーム本編:広告表示なし

広告非表示方法について、どなたかご存知でしたらご教示頂きたく。
宜しくお願い致します。



この記事に返信する


窓月らら

リンク

2015/11/20(Fri) 03:12:51|NO.73141

HspActivity.java をみると

// Do some cleanup @Override public void onDestroy() { if (adView != null) { adView.destroy(); } super.onDestroy(); }
というのが書かれてますねぇ…
これはアプリ終了時に呼ばれる部分ですけど、
これをHSP側から呼べるように改造すればできるような気はします。



窓月らら

リンク

2015/11/20(Fri) 03:42:51|NO.73142

あ、adView.destroy(); は破棄だからダメか。

確かに、常時表示しっぱではデザインの面で制限になっちゃいますよね。
これは公式に対応してほしいところ。

あと、関連で一部のスマホでAdMobが表示されない不具合を確認しています。
それもなんとかしてほしいところだけど、手持ちの機種じゃないので詳細不明。



zakki

リンク

2015/11/20(Fri) 09:20:10|NO.73145

正式な手法は知りませんが、破棄と生成でやってる人はいるようで

http://stackoverflow.com/questions/23553904/how-do-i-show-and-hide-admob-banner-ads



ゼーット!!

リンク

2015/11/20(Fri) 10:36:12|NO.73150

こんちにわん。
http://dev.onionsoft.net/seed/info.ax?id=837
上記アドレスは昨年のコンテストのゲームですが、これの動画(もしくは直接Androidアプリ)を
観てください。
下部にあるAdmob表示のような挙動でよいのでしょうか?



窓月らら

リンク

2015/11/20(Fri) 11:48:33|NO.73153

試してないのですが、
devcontrol "AdMob" を実行すると adsinited = true; となって
次回からこのフラグを見て何もしないで抜けるように書かれてますね。
つまり、

public int callAdMob( int val ) { if(adsinited) { return -1; }
この部分に非表示にする細工をすればいけるような気がしますね。
うまくいけば、devcontrol "AdMob" を実行する度に表示/非表示ができるかと。



ようすけ

リンク

2015/11/20(Fri) 12:25:25|NO.73155

>HSP側から呼べるように改造すればできるような気はします。

HSP側からHspActivity.javaの処理を呼び出すには
どのようにしたらできますでしょうか?
HSPからjavaの処理を呼び出すことをやったことがないので
わかりやすく書かれたサイト等がございましたら教えて下さい。


>下部にあるAdmob表示のような挙動でよいのでしょうか?

動画見ました。
まさにこの動画のような処理がやりたいです。
実現方法について情報ございましたら教えて頂けますでしょうか?



ゼーット!!

リンク

2015/11/20(Fri) 12:48:33|NO.73156

>この部分に非表示にする細工をすればいけるような気がしますね。
>うまくいけば、devcontrol "AdMob" を実行する度に表示/非表示ができるかと。

さすがですねー!

窓月ららさんの言うとおりの、まさに同じ方法でやってます。
当時ほかに方法が思いつかず、既存の関数の改造でトグル動作になるように済ませてます。

ただし、生成したAdmobは毎回削除せず、AdViewの位置を画面内外に移動したり戻したりして
表示非表示を実現してます。そのほうがAdmob生成のたびにプチフリを起こされる可能性が少ないし
パケットも無駄に使わないのでよいかなと。微々たる物ですけどね。



ようすけ

リンク

2015/11/20(Fri) 13:20:59|NO.73159

>11:48

こちらの書き込みを見落としていました。
とりあえず内容確認してやってみます。ありがとうございます。



ようすけ

リンク

2015/11/20(Fri) 15:28:19|NO.73160

if(adsinited) { の中に色々記述して試してはみたのですが
javaが殆どわからない為、HspActivity.javaを読んでもチンプンカンプンなレベルでして…
思うようにできませんでした。

HSP側でdevcontrol "AdMob"を実行する度に、adviewを画面内外へ移動させ
表示/非表示を実現したいのですが、どのように記述すればよいか教えて頂けませんでしょうか…?



kanamaru

リンク

2015/11/20(Fri) 17:55:03|NO.73161

僕も調べてみましたが、
popUp.dismiss()で非表示にできることしかわかりませんでした。



ゼーット!!

リンク

2015/11/20(Fri) 18:17:54|NO.73162

その時の開発用PCが実家にあるので、プログラムほじくりだしてレスします。
帰省できるのは深夜もしくは明日になりますー。(^^;

そのまえに、ららさんが汎用性の高いのを書きそうな気がする・・。(・ω・`



窓月らら

リンク

2015/11/20(Fri) 22:11:11|NO.73165

> ゼーット!!さん

キター!
いえいえ、まだ書いてなかったので楽しみにお待ちしております♪



ゼーット!!

リンク

2015/11/21(Sat) 22:33:08|NO.73174

遅くなってすいません。お待たせしました。(^^;
最新のNDKやらでコンパイルできるかと試してみたら、見たことないエラーがでて
「な、なんじゃこりゃぁぁ!!」と無駄に闘ってました。β2のコメント欄に沢渡さんが書いていたので解決したけど、解せん。

admobが適用されているHspActivity.javaを開きます。

冒頭、importが並ぶ適当なところに下記2行を追加します。

import android.os.Handler; import android.view.View;

次に、下までスクロールし、

// for AdMob
を見つけたら、下の行に以下を追加します。

final Handler handler = new Handler(); boolean adFlgDisp = false;

画面表示のフラグに上記 adFlgDisp があり、false になってます。
アプリが起動すると、adViewが呼び出されます。その時点で adFlgDisp が true になる必要があるので、
下記の場所に追加します。


if(adView!=null) { Log.i("HspActivity","callAdMob."); _activity.runOnUiThread(new Runnable() { @Override public void run() { adsinited = true; adFlgDisp = true; //←これを追加

んで、肝心のトグル動作を挿入します。下記の場所に

public int callAdMob( int val ) { if(adsinited) { //★ここの空間に挿入してねー return -1; }

以下のプログラムを挿入します。

if(adFlgDisp) { new Thread(new Runnable() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { adFlgDisp = false; popUp.update(0, -300, disp_width+4, 77); } }); } }).start(); } else { new Thread(new Runnable() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { adFlgDisp = true; popUp.update(0, 0, disp_width+4, 77); } }); } }).start(); }

これで、HSPから

devcontrol "AdMob"
を実行するたびにON/OFFできると思います。



P.S.

nativepokeって、最近でてきた関数だったのですね。
β2のHspActivity.java見たら以前と結構違ってたし。



窓月らら

リンク

2015/11/21(Sat) 22:40:50|NO.73175

> ゼーット!!さん

キター! ありがとうございます♪
早速試してみようと思いますが、いま大量バックアップ中なのでそれが終わってから…

> nativepokeって、最近でてきた関数だったのですね。

そうなのです。
なのでダイアログのバグを直す過程ではじめて気づいたわけなのです。



ゼーット!!

リンク

2015/11/21(Sat) 22:44:46|NO.73176

今見たら・・・タブだらけになったな・・。

とはいえ、1年くらい前のやり方なので、同様の動作の実現は
いまだったら他にもっと良い方法があるのやもしれません。



ようすけ

リンク

2015/11/21(Sat) 23:58:57|NO.73181

できました!

ゼーット!!さんに教えて頂いた通りに入力し、無事広告の表示/非表示が実現できました。
この度は色々とお手数お掛けしました。

本当にありがとうございます! m(_ _)m



窓月らら

リンク

2015/11/22(Sun) 00:47:22|NO.73182

うちも試しました。バッチリ!
使わせて頂きます♪



ゼーット!!

リンク

2015/11/22(Sun) 03:53:04|NO.73184

嗚呼、うまくいったようで良かった。

こちらも念のためにすべて現在の最新バージョンとなる組み合わせ
HSP3.5 beta2
jdk1.8.0_65 android-ndk-r10e apache-ant-1.9.6
でコンパイル、実機転送まで確認しました。大丈夫そうです。

一応ですが、エラー処理もなにもやっていない暫定的な方法なので場合によっては
広告の「出るときと隠れるときが逆になる」などの意図しない挙動も起こりえます。

なので、今だったらさらにnativepoke等を使用して、広告表示状態をHSP側に返してあげれば
そのような不具合も回避できるのかなと思います。



ONION software Copyright 1997-2023(c) All rights reserved.