2012年9月27日木曜日

assetsフォルダのデータベース利用2

圧縮されているデータベースを解凍してコピーする。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;

public class KenpoActivity extends Activity {

 private String DB_PATH;
 private String DB_NAME;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.i("kenpoActivity", "onCreate()");

  setContentView(R.layout.minpo);

  DB_PATH = "/data/data/" + this.getPackageName() + "/databases/";//
  DB_NAME = "ropou.db";


  DatabaseHelper dbHelper = new DatabaseHelper(this, DB_NAME, null, 1);

  //データベースが在るか確認する
  boolean DatabaseCheck = databaseExists(DB_PATH,DB_NAME);

  if(DatabaseCheck){
   Log.i("kenpoActivity", "データベース在り" );
  }else{
   //データベースが無い場合assetsフォルダのデータベースをコピー
   Log.i("kenpoActivity", "データベース無し" );

   //空のデータベース作成
   dbHelper.createEmptyDataBase();

   //データベースコピー
   //databaseCopy(DB_PATH,DB_NAME);

   //データベースが圧縮されている場合
   databaseUnZipCopy(DB_PATH,DB_NAME);
  }

 }

 /*
  * データベースの存在確認
  */
 private boolean databaseExists(String path, String name) {
  // TODO 自動生成されたメソッド・スタブ
  SQLiteDatabase checkDb = null;

  try {
   String dbPath = path + DB_NAME;
   checkDb = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY);
  } catch (SQLiteException e) {
   // データベースはまだ存在していない
   Log.i("kenpoActivity", "データベースが無い");
  }

  if (checkDb != null) {
   Log.i("kenpoActivity", "データベースが在る");
   checkDb.close();
  }

  return checkDb != null ? true : false;
 }

 /*
  * データベースのコピー
  */
 private void databaseCopy(String path, String name) {
  // TODO 自動生成されたメソッド・スタブ

  try {
   InputStream mInput = this.getAssets().open( name );//assetsフォルダのデータベース

   // デフォルトのデータベースパスに作成した空のDB
   String outFileName = path + DB_NAME;

   OutputStream mOutput = new FileOutputStream(outFileName);

   // コピー
   byte[] buffer = new byte[1024];
   int size;
   while ((size = mInput.read(buffer)) > 0) {
    mOutput.write(buffer, 0, size);
   }

   // Close the streams
   mOutput.flush();
   mOutput.close();
   mInput.close();

  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }

 }

 /*
  * データベースのコピー 圧縮されている場合
  */
 private void databaseUnZipCopy(String path, String name) {
  // TODO 自動生成されたメソッド・スタブ
  try {
   AssetManager am = getResources().getAssets();
   InputStream is = am.open("ropou.zip",AssetManager.ACCESS_STREAMING);
   ZipInputStream zis = new ZipInputStream(is);
   ZipEntry ze = zis.getNextEntry();

   if (ze != null) {
    String fullPath = path + DB_NAME;

    FileOutputStream fos = new FileOutputStream(fullPath, false);
    byte[] buf = new byte[1024];
    int size = 0;

    while ((size = zis.read(buf, 0, buf.length)) > -1) {
     fos.write(buf, 0, size);
    }
    fos.close();
    zis.closeEntry();
   }
   zis.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /*
  * データベースヘルパー
  */
 public class DatabaseHelper extends SQLiteOpenHelper {

  public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
   super(context, name, factory, version);
   // TODO 自動生成されたコンストラクター・スタブ
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
   // TODO 自動生成されたメソッド・スタブ

  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // TODO 自動生成されたメソッド・スタブ

  }

  //空のデータベース作成
  public void createEmptyDataBase(){
   Log.i("kenpoActivity", "空のデータベース作成" );

   this.getReadableDatabase();
  }
 }

}


空のデータベース作成する部分は、databases フォルダがある場合は必要ないが、
アプリをインストールした時には、databases フォルダが無いので必要になる、
作成されるデータベースのパーミッションもちゃんと設定できるので、
空のデータベースを作成する部分は必要

2012年9月12日水曜日

ペアディバイスの取得


前の記事:Bluetoothアダプタを有効にする 

ペアディバイスを取得してListViewに表示
import java.util.Set;

import android.os.Bundle;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

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

  // Bluetoothアダプタが利用可能か調べる
  BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

  //ペアディバイスの表示
  Set pairedDevices = mBluetoothAdapter.getBondedDevices();

  //ペアディバイスをListViewに表示
  //ListView を取得
        ListView listView = (ListView) findViewById(R.id.listView1);
        //ListView のアダプタ設定
  ArrayAdapter mArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
  
  if (pairedDevices.size() > 0) {
      // Loop through paired devices
      for (BluetoothDevice device : pairedDevices) {
          // Add the name and address to an array adapter to show in a ListView
          mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
       //Log.v("タグ", device.getName() + "\n" + device.getAddress() );
      }
  }
  
  listView.setAdapter(mArrayAdapter);
 }

}


    

    

    



2012年9月10日月曜日

オフラインで地図を使う:osmdroid



1.アプリをインストールする。
アプリ名:Osmdroid
https://play.google.com/store/apps/details?id=org.andnav.osm&feature=search_result#?t=W251bGwsMSwyLDEsIm9yZy5hbmRuYXYub3NtIl0.

2.地図データのダウンロード
日本の地図データをダウンロードしてくる。
http://downloads.cloudmade.com/asia/eastern_asia/japan

都道府県別にもダウンロード出来ます。
都道府県別のデータが容量が少ないのでお勧め。
例:aichi.osm.bz2

3.ダウンロードしたファイルをOsmdroidで利用できるようにする。
OsmAndMapCreator をダウンロードしてきて解凍する。
http://download.osmand.net/latest-night-build/

OsmAndMapCreator.bat をダブルクリックしてソフトを起動させる。
File -> Create .obf from osm file... を選択して、
ダウンロードしてきたファイルを選択すれば変換が始まります。

4.変換して出来上がったファイルをSDカードにコピー
保存先を変更していなければ、
C:\Users\ユーザー名\osmand に変更したデータが保存されている
アンドロイドのSDカードの osmand フォルダに obfファイルとtilesフォルダをコピーする。

5.Osmdroidを起動させる。
移動させたファイルは自動的に読み込まれる。

参考:
ドラッグで範囲指定
地図を動かすときは右ボタンを押しながら移動
拡大は右上のボタン

ダウンロードした地図データから範囲を指定して変換する場合は、
Create .obf from osm file for specifed area... を選択する。

地図データをダウンロードしていなくても直接、範囲を指定して変換する事もできる。

変換には結構時間が掛かる。
変換中にはtemp ファイルが作成されて結構な容量が必要、空き容量は30GB位は必要

OsmAndMapCreator.batをメモ帳で開き、メモリ最大サイズを増やして時間を短縮する。
初期の状態は720M

MapView の準備

OpenStreetMap
http://download.geofabrik.de/osm/asia/

mapsforge

map ファイルのダウンロード

download.mapsforge.org
More www.mapsforge.org

osmdroid





osm ファイルダウンロード
http://downloads.cloudmade.com/asia/eastern_asia/japan#downloads_breadcrumbs


javascript
OpenStreetMap.js
OpenLayers.js


2012年9月5日水曜日

BluetoothChatの使い方

ダウンロードしてきたファイルを解凍して、
プロジェクトをEclipseに読み込んで
BluetoothChatService.java のUUIDを変更する。

変更後
// Unique UUID for this application private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

エラー対策:Class requires API level 5 (current min is 1)


Class requires API level 5 (current min is 1): android.bluetooth.BluetoothAdapter

パッケージ・エクスプローラからAndroidプロジェクトを選択して、
右クリック->Androidツール->Cleare Lint Marlers を選択する。


2012年9月2日日曜日

Bluetoothアダプタを有効にする

Bluetoothアダプタが利用可能か調べて
利用可能な場合、有効になっているか調べて、
有効になっていない場合有効にする。

import android.os.Bundle;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.util.Log;

public class MainActivity extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  //Bluetoothアダプタが利用可能か調べる
  BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  if (mBluetoothAdapter == null) {
   Log.v("タグ", "Bluetoothアダプタが利用出来ません");
  }else{
   Log.v("タグ", "Bluetoothアダプタが利用出来ます");
   
   //Bluetoothアダプタが有効か調べる
   if (mBluetoothAdapter.isEnabled()) {
    Log.v("タグ", "Bluetoothアダプタが有効です");
   }else {
    Log.v("タグ", "Bluetoothアダプタを有効にします");
    
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
       startActivityForResult(enableBtIntent, 1);
   }
   
  }
 }

}


Bluetoothアダプタが利用可能か調べる


import android.os.Bundle;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.util.Log;

public class MainActivity extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  //Bluetoothアダプタが利用可能か調べる
  BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  if (mBluetoothAdapter == null) {
   Log.v("タグ", "Bluetoothアダプタが利用出来ません");
  }else
   Log.v("タグ", "Bluetoothアダプタが利用出来ます");//
 }

}
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Bluetoothアダプタが利用できないとBluetooth機能が使えない。