読者です 読者をやめる 読者になる 読者になる

Android アプリ開発 「MATRIX」

Androidアプリの開発に役立つサンプル集

ボタンがクリックされた時に処理が行われるようにする方法

レイアウト画面でボタンを置いてもクリックを監視するリスナーを登録しなければ、ボタンが押されるだけで何も起こりませんね。ボタンのクリックイベントを取得する方法はいくつかありますが、今回はボタンに直接クリックリスナーを登録する方法を紹介します。

 

<サンプルコード>

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
//おまじない(自動生成される)
super.onCreate(savedInstanceState);
//レイアウトをビューにセット
setContentView(R.layout.activity_main);

//ボタンをインスタンス化すると同時にレイアウトにあるボタンを登録
Button button = (Button)findViewById(R.id.button);
//テキストビューをインスタンス化すると同時にレイアウトにあるテキストビューを登録
final TextView textView = (TextView)findViewById(R.id.mojimoji);

//ボタンにクリックを監視するリスナーをセットする。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ボタンが押された時の処理を書く
textView.setText("ボタンが押されたよ!");
}
});
}
}

<結果>

f:id:vw-dsg:20161119010156p:plain

中央のボタンを押すとメッセージが表示されました。

 

END 

 

自作アプリにAdMobのインタースティシャル広告を表示する手順

画面の下の方に表示される控えめなバナー広告と違い、インタースティシャルは画面いっぱいにいきなり広告が表示されるので、あまり頻繁に表示しない方が良いかもしれませんね。

 

 1.Google Play開発者サービスSDKをダウンロード

Android Studioの「SDKマネージャー」を開いて、下の方の「Extras」にある「Google Play services」にチェックを入れて右下のインストールボタンを押す。

※既にインストールされている場合はこの手順は行う必要はありません。

 

2.AndroidManifest.xml に以下を追加

<1> インターネットアクセスに関する設定 

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<2> グーグルプレイに関する設定

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

 

3.インタースティシャル広告を表示するActivity(サンプル)

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

//広告表示に関係するインポート
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends AppCompatActivity {

//広告の使用宣言
InterstitialAd interstitialAd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

interstitialAd = new InterstitialAd(this); //インスタンス
interstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712"); //テスト用広告ID
loadInterstitial(); //Interstitial広告の読み込み開始

//広告状態のリスナー
interstitialAd.setAdListener(new AdListener() {

//広告が閉じられた時
@Override
public void onAdClosed() {
super.onAdClosed();
}

//広告がロードできた時
@Override
public void onAdLoaded() {
super.onAdLoaded();
showInterstitial();
}

//広告がロードできなかった時
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
}
});
}

//広告をロードする
private void loadInterstitial() {
AdRequest adRequest = new AdRequest.Builder().setRequestAgent("AdTest").build(); //広告ビルダーをビルド
interstitialAd.loadAd(adRequest); //広告のロード開始
}
//広告を表示する
private void showInterstitial() {
//広告がnullではない+広告が読み込まれている場合
if(interstitialAd != null && interstitialAd.isLoaded()) {
interstitialAd.show(); //広告の表示
}
}
}

 

4.結果

f:id:vw-dsg:20161012071153p:plain

 

画面いっぱいにインタースティシャル広告が表示されました。

 

END

 

自作アプリにAdMobのバナー広告を表示する手順

 

 1.Google Play開発者サービスSDKをダウンロード

Android Studioの「SDKマネージャー」を開いて、下の方の「Extras」にある「Google Play services」にチェックを入れて右下のインストールボタンを押す。

※既にインストールされている場合はこの手順は行う必要はありません。

 

2.AndroidManifest.xml に以下を追加

<1> インターネットアクセス設定 

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<2> グーグルプレイ設定

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

<3> 広告表示設定

<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" />

 

3.レイアウトxml ファイルに以下を追加

xmlns:ads="http://schemas.android.com/apk/res-auto"
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111"> //これはテスト用バナーID
</com.google.android.gms.ads.AdView>

 

4.表示するActivity に以下を追加 

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

onCreate 内に追加

AdView adView = (AdView)findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);

 

5.結果

f:id:vw-dsg:20161009193715p:plain

 

下部にテスト用のバナー広告が表示されました。

 

END

 

Android Studioの動作がおかしくなったら

Android Studioの動作がおかしくなったら

Android Studioは時々動作が変になるときがありますね。

例えば、何度修正してもエラーが消えなかったり、更新しても実機やエミュレータに反映されなかったり、何も変更していないファイルにエラーが発見されたり・・・。

と、時々ですがわけのわからない状態に陥りますが、そんな時はどうすれば良いのでしょう?

 

その答えは・・・そう、万能薬の「再起動」。。。

 

まず、Android Studioだけを再起動して様子を見てみます。それでも改善しない時はPCの再起動をしてみる。

 

開発中だとブラウザやメモ帳やフォルダなどなど、あれこれ10個以上のウィンドウが開いているので、できればPCの再起動はやりたくないのですが・・・こればっかりは仕方ありませんね。

 

END

 

APKの作成中に「64K・・・」関連のエラーが出た場合の対処方法

テスト中は問題なかったのにAPKを作成しようとしたら「64K・・・」という感じのエラーが出て困ったことがこれまでに2度ほどあった。原因はよくわからないが、他のサイトをみるとどうもアプリが太ってくると(コードが増えてくると)発生してしまうらしい。

対処方法は、Android Studioの公式サイトにもあって「build.gradle」と「AndroidManifest.xml」に3行ほど追加すればよいとのこと。

 

<build.gradle> ※2行追加

android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
defaultConfig {
applicationId "com.android.soft"
minSdkVersion 11
targetSdkVersion 22
versionCode 1
versionName "1.0"

multiDexEnabled true //これを追加する
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0-alpha2'
compile 'com.google.android.gms:play-services:9.2.1'
compile 'com.google.android.gms:play-services-maps:9.2.1'
compile 'com.android.support:support-v4:23.3.0'

compile 'com.android.support:multidex:1.0.0' //これを追加する
}

 

<AndroidManifest.xml> ※applicationゾーンに1行追加

android:name="android.support.multidex.MultiDexApplication" //これを追加する

 

これでAPKが正常に作成されるようになる場合があるので、困ったときは試してください。

 

END

 

getSpeed()で移動速度を取得する

移動速度を取得するにはLocationクラスの「getSpeed」メソッドを利用する。

取得できるのは「メートル/秒(m/s)」のFloatとなる。

Float sokudo;
sokudo = location.getSpeed();

 

END

String文字の比較は”==”ではなく”equals”を使う

Stringを”==”で比較してしまうと一致していても、そのままスルーされてしまうので要注意だ。

String text = "test";

if(text == "test"){
//処理されない
}

if(text.equals("test")){
//処理される
}

 

END