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

逆ジオコーディングで住所の取得

GoogleのAPIを利用して、座標から住所を取得します。
GoogleのWebサービスに依存しているので、使えない場合があるので注意しましょう。
Android 2.3(API level 9)からisPresent()で、サービスが生きてるかどうかをチェックできるようです。

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;

public class ReverseGeocode {

    public String point2address(Context context, double latitude, double longitude) throws IOException {

        String string = new String();

        Geocoder geocoder = new Geocoder(context, Locale.JAPAN);

        List<address> list_address = geocoder.getFromLocation(latitude, longitude, 2);

        if(!list_address.isEmpty()) {
            string = list_address.get(1).getAddressLine(1);
        } else {
            string = "現在地が特定できませんでした。";
        }

        return string;
    }

}

続きを読む…»

7,809 views

Android開発用IDE「Android Studio」

Googleから「Android Studio」というAndroid開発用のIDEが発表されたので早速インストールを試してみました。

Android Studioは2013年5月15日にGoogleのイベントで発表されたAndroid用のIDEです。
Eclipseの場合はADT(Android Developer Tools)プラグイン、Android SDKなどを別々にインストールしなければいけなかったのが、Android Studioの場合はAndroid SDKをインストールする必要がない。
ただし、JDKだけは必要となるのでインストールが必要です。

Android Studio 0.1.1 Build 130.687321をダウンロードしてインストール
http://developer.android.com/sdk/installing/studio.html
※現時点ではまだ早期アクセス版で、正式リリースではないようです。
setup1

setup2
続きを読む…»

3,513 views

グーグルマップに移動した軌跡を表示する [Android]

グーグルマップに現在地を表示し、移動した軌跡を線で描画してみたいと思います。
描画の度にオーバーレイを重ねていくと、当然のことながら重たくなっていくので、
表示するオーバーレイは常に1枚、ルート情報はpathRouteに記憶させるようにしました。
ルート情報が増える毎にオーバーレイを書き直しています。

まずは、LocationListenerを実装し、MapActivityクラス継承したクラスを作成します。

public class MyMap extends MapActivity implements LocationListener {

    private MapView mMapView;
    private MapController mMapController;
    private MyLocationOverlay mOverlay;
    private LocationManager mLocationManager;
    private LineOverlay lineOverlay = new LineOverlay(); //軌跡を描画するオーバーレイ

    public static List<GeoPoint> pathRoute; //ルート情報

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

        mMapView = (MapView)findViewById(R.id.mapview);
        mMapView.setClickable(true);

        mMapController = mMapView.getController();
        mMapController.setZoom(16);

        //現在地を表示
        mOverlay = new MyLocationOverlay(this, mMapView);
        mOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER);
        mOverlay.enableMyLocation();
        mOverlay.runOnFirstFix(new Runnable(){
            public void run(){
                GeoPoint mPoint = mOverlay.getMyLocation();
                mMapController.animateTo(mPoint);
            }
        });
        mMapView.getOverlays().add(mOverlay);

        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    }

    @Override
    public void onResume(){
        super.onResume();

        mOverlay.enableMyLocation();

        if (mLocationManager != null) {
            mLocationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, // 精度は高いが遅い(誤差15m程度)
                //LocationManager.NETWORK_PROVIDER, // 精度は低いが速い(誤差100m程度)
                //LocationManager.PASSIVE_PROVIDER, //位置情報の修正を行わない特殊なプロバイダー(他アプリ等で測位された場合に、その位置情報を流用するらしい)
                5000, //通知する時間の間隔をミリ秒で指定します
                0, //通知する距離の間隔をメートルで指定します
                this);
        }
    }

    public void onPause(){
        super.onPause();

        mOverlay.disableMyLocation();

        if (mLocationManager != null) {
            mLocationManager.removeUpdates(this);
        }
    }

    //…以下省略
}

onLocationChangedイベントにてlineOverlayにポイントを追加します。 続きを読む…»

9,279 views

音を鳴らす – ToneGenerator [Android]

ToneGeneratorを使って、簡単な音を鳴らしてみましょう。

必要なインポート

import android.media.AudioManager;
import android.media.ToneGenerator;

音を鳴らす

ToneGenerator toneGenerator;
toneGenerator = new ToneGenerator(
        AudioManager.STREAM_ALARM,
        ToneGenerator.MAX_VOLUME);
toneGenerator.startTone(ToneGenerator.TONE_CDMA_EMERGENCY_RINGBACK);

続きを読む…»

7,260 views

Zip形式圧縮ファイルを解凍する Android

Androidで、Zip形式の圧縮ファイルを解凍します。

インポート

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.BufferedOutputStream;

import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

必要な変数の宣言

ZipInputStream in = null;
String zipPath = null;
ZipEntry zipEntry;
int data;
String file_name;

続きを読む…»

4,745 views

Bluetoothを扱う Android

AndroidでBluetoothを使ってみます。

Bluetoothアダプタークラスをインポート

import android.bluetooth.BluetoothAdapter;

アダプターとリクエストコードの定義

BluetoothAdapter mBluetoothAdapter = null;
final int REQUEST_ENABLE_BT = 1; //任意のコード

アクティビティのonCreateでアダプターをセットします。

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

	mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
}

続きを読む…»

6,231 views

SDカードにフォルダーを作成する mkDir

SDカード内にフォルダーを作成します。
再帰的に作成するにはmkDirsメソッドを使用します。
※パーミッションの記述は割愛します。

String PATH = Environment.getExternalStorageDirectory().toString() + "/DCIM/Example";

File f = new File(PATH);

if(!f.exists()) {
    try {
        f.mkdir();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
4,762 views

JSONデータを扱う [Android]

以下のようなJSONデータがあったとします。

{"json":[{"id": "00001","category": "カテゴリー1","title": "テスト1"},{"id": "00002","category": "カテゴリー2","title": "テスト2"}]}
String json_data = "{\"json\":[{\"id\": \"00001\",\"category\": \"カテゴリー1\",\"title\": \"テスト1\"},{\"id\": \"00002\",\"category\": \"カテゴリー2\",\"title\": \"テスト2\"}]}";

JSONArray jArray;
StringBuilder sb = new StringBuilder();

try {
    jArray = new JSONObject( json_data ).getJSONArray( "json" );

    for (int i = 0; i < jArray.length(); i++) {
        JSONObject jsonObj = jArray.getJSONObject(i);
        sb.append(jsonObj.getString("title"));
    }

    Toast.makeText(this, sb.toString(), Toast.LENGTH_LONG).show();

} catch (JSONException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

コード上でデータを追加する場合(例外処理は上記と同様にしてださい)

JSONObject nJArray = new JSONObject();
nJArray.put("id", "00003");
nJArray.put("category", "カテゴリ3");
nJArray.put("title", "テスト3");
jArray.put(nJArray);
9,837 views

assetsフォルダーにあるテキストファイルを読み込む

assetsフォルダーに格納したテキストファイルを読み込みます。

InputStream inputStream = null;
BufferedReader reader = null;
try {
    inputStream = getResources().getAssets().open("ファイル名");
    reader = new BufferedReader(
              new InputStreamReader(inputStream));
    String line;
    StringBuilder sb = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        Log.v("reader", line);
        if(line != ""){
            sb.append(line);
        }
    }
    String str = sb.toString();
    Toast.makeText(this, str, Toast.LENGTH_LONG).show();

} catch (IOException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        reader.close();
        inputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
6,218 views

New I/Oの高速ファイル入出力

FileクラスにはCopyなどというメソッドがないようなので、調べていたらNew I/Oというものを発見したのでメモ。

java.nio.channels.FileChannelを使用して、簡単にコピーできます。

File inputFile  = new File("入力元ファイルのパス");
File outputFile = new File("出力先ファイルのパス");

try {
    FileChannel inputChannel  = new FileInputStream(inputFile).getChannel();
    FileChannel outputChannel = new FileOutputStream(outputFile).getChannel();

    // インプットチャネルの出力をアウトプットチャネルに接続
    inputChannel.transferTo(0, inputChannel.size(), outputChannel);

    inputChannel.close();
    outputChannel.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
2,298 views