カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

GoogleMap Android API v2 使い方#04

今回は地図上に線や図形を描いてみましょう。
GoogleMapのオブジェクト(mMap)は作成済とします。

線を描く

描画オプションのクラスをインポートします。

import com.google.android.gms.maps.model.PolylineOptions;

サンプルとして2点の座標を宣言

private LatLng place1 = new LatLng(43.061363052307875, 141.3549041748047); //札幌
private LatLng place2 = new LatLng(33.54139466898275, 130.3857421875);     //福岡

描画オプションのインスタンスを生成

PolylineOptions options = new PolylineOptions();

線の色を指定します。

options.color(Color.RED);

線の幅を指定します。

options.width(3.0f);

座標を追加します。

options.add(place1, place2);

設定が完了したので、マップに追加します。

mMap.addPolyline(options);

SC20140822-094132

描画した線をクリアしたい時は以下のようにします。

options.getPoints().clear();

位置情報と併用して移動の軌跡を表示したりすることもできます。
続きを読む…»

1,902 views

GoogleMap Android API v2 使い方#03

今回は地図で任意の場所を表示させてみたいと思います。
v1ではMapController.animateToでやっていたことと同様です。

GoogleMapのオブジェクト(mMap)は作成済とします。

地図の中心位置の座標を指定

まずは、必要なクラスをインポートします。

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.model.LatLng;

CameraUpdateFactoryクラスを使ってCameraUpdateオブジェクトを作成します。

CameraUpdate cu = 
        CameraUpdateFactory.newLatLng(
                new LatLng(34.7, 135.5));

GoogleMap.moveCameraメソッドで地図を指定位置へ移動させます。

mMap.moveCamera(cu);

続きを読む…»

1,443 views

GoogleMap Android API v2 使い方#02

今回は、マーカー表示と円の描画方法についてご紹介します。

GoogleMap Android API v2では、マーカーや円を描く等、
v1よりも格段にやり易くなっています。

マーカーを表示する

必要なインポートは以下の通りです。

import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.LatLng;

マーカーを追加。
GoogleMapのオブジェクト(mMap)は作成済とします。

Marker mMarker = mMap.addMarker(new MarkerOptions()
    .position(LatLng latLng));

マーカーを追加するだけならこれだけです。

次にマーカーのアイコンをカスタマイズする場合。
追加で必要なインポートは以下の通りです。

import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;

マーカーに使用する画像をリソースから取得します。
png形式で作成し、res/drawableディレクトリに追加しておいてください。

BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.ic_maps_indicator_current_position);

マーカーに座標と一緒にアイコンを指定し、作成します。

Marker mMarker = mMap.addMarker(new MarkerOptions()
    .position(LatLng latLng)
    .icon(icon));

続きを読む…»

3,930 views

GoogleMap Android API v2 使い方#01

今回は地図の基本設定と、カメラ位置とズームレベルの変更の方法をご紹介します。
Android2.x系、3.1.x系以上の2パターンを紹介しています。

API v2の導入方法については以下をご覧ください。
[Google Maps Android API v2]

2014-08-18 追記


GooglePlay開発者サービス(GooglePlayServices)がAndroid2.2はサポートしなくなりました。
そのため、Android2.2ではGoogleMap Android API v2が利用できません。

Android2.x系でも動作するように作成する場合

メインとなるFragmentActivityを継承したクラスに機能を実装していきます。

public class MainActivity extends FragmentActivity

変数の宣言

private GoogleMap mMap;

マップオブジェクトを生成する関数を作成

private void setUpMapIfNeeded() {

    if (mMap == null) {

        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();

    }

}

作成した関数をActivityのonCreateで実行します。

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

    setUpMapIfNeeded();
}
マップの各種設定を指定する場合

まず変数の宣言

private GoogleMap mMap;
private UiSettings mUiSettings;

続きを読む…»

1,912 views

2点間の距離を取得 – Location.distanceBetween

LocationクラスのdistanceBetweenメソッドを使って、2点間の距離を取得することができます。

書式

Location.distanceBetween(
        double startLatitude,
        double startLongitude,
        double endLatitude,
        double endLongitude,
        float[] results);
引数
startLatitude 開始地点の緯度
startLongitude 開始地点の経度
endLatitude 終了地点の緯度
endLongitude 終了地点の経度
results 結果を格納する変数

続きを読む…»

6,881 views

GoogleMaps API v2 ビルドエラー

GoogleMaps API v2を使用したアプリを署名付きでビルドする際、以下のようなエラーが発生することがあるらしい。

"app_name" is not translated in af, am, ar, be, bg, ca, cs, da, de, el, en-rGB, es, es-rUS, et, fa, fi, fr, hi, hr, hu, in, it, iw, ja, ko, lt, lv, ms, nb, nl, pl, pt, pt-rPT, ro, ru, sk, sl, sr, sv, sw, th, tl, tr,  uk, vi, zh-rCN, zh-rTW, zu

どうやら翻訳に関するエラーらしい。
特に害はないので無視すればいいという記事もありました。
解決方法としては、translatable属性にfalseを設定すればいいらしい。

<string name="account_setup_imap" translatable="false">IMAP</string>

参考URL:
http://tools.android.com/recent/non-translatablestrings

リリースすることがないのであれば問題ありませんが、一旦エラーが出るとデバッグもできません。
その場合はプロジェクトを右クリックし、[Androidツール]-[Lintマーカーのクリア]を実行します。
31

メニューから[ウィンドウ]-[設定]-[Android]-[Lintエラー検査]-[アプリケーションのエクスポート時に完全エラー検査を実行し、致命的エラーが見つかった場合は中断する]のチェックを外す
32

1,550 views

Google Maps Android API v2

Google Maps Android API v2を使ってみました。
v2はv1とは互換性がありませんが、ベクター地図になり、視点の変更や屋内の地図表示等、色々便利になったようです。

Google Play Servicesライブラリ

まず、v2ではGoogle Play Servicesが必要になるので、Android SDK Managerで最新版をダウンロードし、インストールします。
1

Eclipseにて新規プロジェクトを作成します。
「既存コードからのAndroidプロジェクト」を選択し[次へ]
2
続きを読む…»

3,249 views

WebViewを使ったハイブリッドアプリの作成 [Android]

HTML5+JavaScriptを使ってスマホアプリを開発することもできます。
ネイティブとWebアプリの機能を兼ね備えた、俗にハイブリッドアプリと呼ばれるそうです。

ここで作成するのはハイブリッドというには簡単すぎるものですが、
触りとなるものです。

まず、メインとなるアクティビティを作成します。
サンプルですので、WebViewのみ表示するものとなっています。

public class SampleActivity extends Activity {

    private final int FC = ViewGroup.LayoutParams.FILL_PARENT;
    public static WebView web;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(1);

        setContentView(linearLayout);

        web = new WebView(this);
        linearLayout.addView(web, new LayoutParams(FC, FC));

        // JavaScriptを有効にする
        web.getSettings().setJavaScriptEnabled(true);

        // JavaScriptにAPIを追加する
        web.addJavascriptInterface(new JavaScriptObject(this), "myapi");

        // スクロールバーを非表示にする
        web.setHorizontalScrollBarEnabled(false);
        web.setVerticalScrollBarEnabled(false);

        // フォーカスを有効にする
        web.setFocusable(true);

        // assetsディレクトリに用意したHTMLを読み込み
        web.loadUrl("file:///android_asset/sample.html");
    }

}

29行目のフォーカスを有効にするというのはデフォルトで有効になっていますが、
敢えて明示的に有効にしています。
どういった場合に無効にするのかと言いますと、全画面表示のゲームを作成する場合等です。
無効にする場合は引数をfalseとします。

web.setFocusable(false);

更にその場合はスリープモードにしないようにもしておいたほうがよいでしょう。
onCreateの最後にでも記述しておきましょう。

// スリープモードにしないようにする
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

次に、JavaScriptのAPIとなるクラスを作成します。 続きを読む…»

5,589 views

カメラを扱うまとめ – Android

Androidでカメラを扱うまとめです。
単純に撮った写真を保存するパターンと、パラメーターを指定して保存するパターン、
撮影した画像を圧縮して保存するパターンの3パターンを紹介します。

まずは、カメラを使用するために必要なパーミッションをAndroidManifest.xmlに記述します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />

撮影処理をするSurfaceViewを継承したクラスを作成します。

まず、簡単に保存するパターン 続きを読む…»

3,800 views

端末の起動時に処理を実行する [Android]

Androidでは、端末の起動時に発行されるandroid.intent.action.BOOT_COMPLETEDというブロードキャストインテントを受け取り、処理を実行させることができます。

これを利用し、バックグラウンドで常駐するアプリを作成することが可能です。
ここでは例として位置情報を取得し、位置情報が更新されたらトーストでメッセージを表示するサービスをバックグラウンドで常駐させるように作成しています。

AndroidManifest.xmlapplicationタグ内に以下を記述

<service android:name="ExampleService"></service>
<receiver
    android:name=".BootReceiver"
    android:enabled="true">

    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

起動時にブロードキャストインテントを受け取れるようにパーミッションの設定を記述します。

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

ブロードキャストインテントを受け取るブロードキャストレシーバーを 続きを読む…»

8,023 views