初めてのRuby On Rails③ (メールを送る)
Railsには、メールを送信するための仕組みとしてActionMailer
という機能があります。
今回は、ActionMailer
を使用して、Gmailのメール送信を試してみます。
1.環境設定
設定ファイルにGmailの設定を記入します。
config/environments/development.rb
config.action_mailer.default_url_options = { :host => "localhost", :port => 3000 } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :domain => 'example.com', :user_name => "[ユーザー名]", :password => "[Gmailのパスワード]", :authentication => 'plain', :enable_starttls_auto => true, }
2.ActionMailerクラスを作成
ActionMailerクラスを生成するには、以下のコマンドを使用します。
rails generate mailer [Mialerクラス名] [アクション名]
例えば、message
というクラスにtest
アクションを定義した場合は、
次のようにコマンドを実行します。
rails generate mailer message test
自動的に以下のファイルが生成されます。
create app/mailers/message.rb invoke erb create app/views/message create app/views/message/test.text.erb create app/views/message/test.html.erb invoke test_unit create test/mailers/message_test.rb create test/mailers/previews/message_preview.rb
ActionMailerクラスは、app/mailers/
配下に作成されています。
app/mailers/message.rb
class Message < ActionMailer::Base # デフォルトの送信もとアドレス default from: "[送信もとアドレス]" # Subject can be set in your I18n file at config/locales/en.yml # with the following lookup: # # en.message.hellp.subject # def hellp @greeting = "Hi" mail to: "[送信先アドレス]" end end
送信されるメッセージの本文は、
app/views/message/test.html.erb
に定義します。
<h1>Message#test</h1> <p> <%= @greeting %>, find me in app/views/message/test.html.erb </p>
3. 送信確認
railsのコンソールからメールを送信してみます。
rails console Message.test.deliver
app/mailers/message.rb
に定義した、
送信先のメールアドレスにメールが送信されていれば、正常に動作しています。
初めてのRuby On Rails② (scaffoldジェネレータ)
Rubyには、コードを自動生成するジェネレータが用意されています。
今回は、データベースのCRUD、
データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)
の処理をを自動的に作成してくれる scaffold
ジェネレータを使ってみました。
1.railsプロジェクトの作成
今回は、サンプルとして「bookshelf」というプロジェクトを作成します。
rails new bookshelf
2.scaffoldコマンドの実行
scaffoldジェネレータは、rails generate
から始まるコマンドを使用します。
rails generate scaffold [モデル名] ([カラム名]:[データ型]…)
引数としてモデル名を渡して実行しますが、
ここでオプションとしてカラムを追加することも可能です。
カラムは、[カラム名]:[データ型] の書式で記載します。
今回は、「name」(string)と「description」(text)というカラムを持った「Book」というモデルを作成してみます。
rails generate scaffold Book name:string description:text
以下のように、
関連するモデル、ビュー、コントローラ、テストなどが、自動で生成されます。
invoke active_record create db/migrate/20140603151844_create_books.rb create app/models/book.rb invoke test_unit create test/models/book_test.rb create test/fixtures/books.yml invoke resource_route route resources :books invoke scaffold_controller create app/controllers/books_controller.rb invoke erb create app/views/books create app/views/books/index.html.erb create app/views/books/edit.html.erb create app/views/books/show.html.erb create app/views/books/new.html.erb create app/views/books/_form.html.erb invoke test_unit create test/controllers/books_controller_test.rb invoke helper create app/helpers/books_helper.rb invoke test_unit create test/helpers/books_helper_test.rb invoke jbuilder create app/views/books/index.json.jbuilder create app/views/books/show.json.jbuilder invoke assets invoke coffee create app/assets/javascripts/books.js.coffee invoke scss create app/assets/stylesheets/books.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss
まずは、確認のためにhttp://127.0.0.1:3000/books
へ接続してみます。
ActiveRecord::PendingMigrationError
というエラーが表示されました。
これは、rails generate scaffold
コマンドによってプロジェクトの関連ファイルは生成されましたが、
実際のDBのテーブルは、生成されていないため発生するエラーです。
railsがデフォルトで生成されるsqliteDBのファイルを確認しても、テーブルが作成されていないことがわかります。
(dbファイルの場所)
[puroject_path]/db/development.sqlite3
3.DBへマイグレーションファイルを適用する
DBへテーブル情報を反映されるためには、
scaffold
コマンドは、が自動で作成してくれる「マイグレーションファイル」を使います。
「マイグレーションファイル」は、モデルの変更内容をDBへと反映する為の情報が記載されているファイルです。
(マイグレーションファイルの場所)
[puroject_path]/db/migrate/[マイグレーションファイル]
今回は、bookというモデルを作成したので、
[puroject_path]/db/migrate/20140603151844_create_books.rb
というファイルが作成されています。
class CreateBooks < ActiveRecord::Migration def change create_table :books do |t| t.string :name t.text :description t.timestamps end end end
ファイルの中身を見てみるとrails generate scaffold
コマンドで指定したテーブルの、
createメソッドが記述されています。
※ railsでは、モデル名に対して複数型の名称のDBテーブル名をつけるルールになっているため
テーブル名はbooks
となっています。
この、マイグレーションファイルをDBへ反映されるためには、
以下のコマンドを実行します。
rake db:migrate
先ほど確認したsqliteDBファイルを再度確認すると
books
というテーブルができていることが確認できます。
sqlite> .tables books schema_migrations sqlite>
もう一度http://127.0.0.1:3000/books
へ接続し表示を確認すると、
エラーが消え以下のような画面が表示されます。
画面から、New Book
のリンクをクリックすると以下のような画面へ遷移し、
booksテーブルにレコードを追加することができます。
その他、レコードの編集など、
基本的なデータ操作をscaffoldジェネレータを使うだけで簡単に実装することが可能です。
初めてのRuby On Rails①(環境構築)
Webアプリケーション作成のためのフレームワークであるRuby On Rails
の勉強を始めました。
まずは、ローカルでRailsが動く環境を作ってみたいと思います。
Rubyの準備
1.rbenvのインストール
ローカルでの開発環境なので、色々と柔軟に作りたいと思い、
Rubyのバージョン管理ツールrbenv
を使ってRubyをインストールしてみました。
brew install rbenv
インストールが完了したらrbenv
の初期設定を行います。
以下の設定を.zshenv
や.bashrc
に記載します。
この設定で、[user_home]/.rbenv
ディレクトリ配下に各バージョンごとのRubyがインストールされるようになります。
# rbenvの初期設定 if which rbenv > /dev/null; then export RBENV_ROOT=${HOME}/.rbenv export PATH=${RBENV_ROOT}/shims:${PATH} eval "$(rbenv init -)"; fi
その他、必要なツールのインストールを行います。
brew install ruby-build brew install rbenv-gemset brew install rbenv-gem-rehash
2.インストールの確認
ここまでで、正しくrbenv
のインストールおよび設定ができているかを確認するために以下のコマンドを実行します。
rbenv versions
rbenv versions
コマンドは、インストール済みのRubyのバージョンを確認するコマンドです。
設定されているパスが以下のように自分のホームディレクトリを指していれば、正しく設定ができています。
* system (set by /Users/[user_home]/.rbenv/version)
3.rubyのインストール
実際にバージョンごとのRubyをインストールします。
インストール可能なバージョンの確認
rbenv install -l
目的のRubyのバージョンをインストール
rbenv install 2.0.0p451
4.インストールの確認
ruby -v
実行時にダウンロードしたRubyのバージョンが、
以下のように表示されていれば正しくインストールが完了しています。
ruby -v ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]
インストールしたRubyの実行ファイルパスも確認してみます。
which ruby /Users/[user_home]/.rbenv/shims/ruby
.rbenv
配下にインストールされていればOKです。
※rubyのバージョンを切り替える方法
rbenv global [バージョン] rbenv rehash
rehash
コマンドを実行することで、/Users/[user_home]/.rbenv/shims/
配下のパスが指定したバージョンへ切り替わります。
Rails の準備
1.Railsのインストール
gemからRailsをインストールします。
gem install rails
インストールの確認。
rails -v
2.bundleのインストール
依存モジュールのインストールを管理するためにbundler
をインストールします。
gem install bundler
ここまでで、Railsのプロジェクトを作成する準備は完了です。
テストプロジェクトを作成してみる
1.プロジェクトの作成
テスト用のプロジェクトを作成するために、
任意のディレクトリ配下へ移動して以下のコマンドを実行します。
rails new [プロジェクトパス]
これだけで、Railsプロジェクトのひな形が作成されます。
※作成したプロジェクトで使用しているライブラリバージョンの確認
rake about
2.Railsサーバーの起動
Rubyには、標準でWEBrick
というWebサーバーが同梱されています。
以下のrails server
というコマンドを実行すると、
他にWebサーバーが使用されていない場合は、WEBrick
が自動的に立ち上がります。
rails server
以下のようにログが出力されていれば、正しく起動しています。
=> Booting WEBrick => Rails 4.1.1 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option) => Ctrl-C to shutdown server [2014-05-11 19:46:16] INFO WEBrick 1.3.1 [2014-05-11 19:46:16] INFO ruby 2.0.0 (2013-02-08) [x86_64-darwin13.1.0] [2014-05-11 19:46:16] INFO WEBrick::HTTPServer#start: pid=627 port=3000
試しにhttp://localhost:3000にアクセスしてみて、
以下のようなページがでれば、正しくサーバーが起動しています。
3.テストページの作成
Railsのコントローラとアクションを作成して、
アプリケーションのテストページを表示してみます。
rails generate controller [コントローラ名] [アクション名]
たとえばHoge
コントローラのpiyo
アクションのページを作成する場合は、
rails generate controller Hoge piyo
とします。
http://localhost:3000/hoge/piyoにアクセスすると、
以下のようなページが表示されると思います。
たったこれだけで、Webアプリケーションのページが作成できました。
rbenvのインストール(Mac)
Rubyのバージョン管理ツールであるrbenv
を使って、
Rubyの実行環境をつくってみました。
1.rbenvをインストール
brew install rbenv
インストールが完了したらrbenv
の初期設定を行います。
以下の設定を.zshenv
や.bashrc
に記載します。
この設定で、[user_home]/.rbenv
ディレクトリ配下に書くバージョンのrubyがインストールされるようになります。
# rbenvの初期設定 if which rbenv > /dev/null; then export RBENV_ROOT=${HOME}/.rbenv export PATH=${RBENV_ROOT}/shims:${PATH} eval "$(rbenv init -)"; fi
その他、必要なツールのインストール
brew install ruby-build brew install rbenv-gemset brew install rbenv-gem-rehash
2.インストールの確認
ここまでで、正しくrbenv
のインストールおよび設定ができているかを確認するために、
以下のコマンドを実行します。
rbenv versions
※ rbenv versions ~ インストール済みのRubyのバージョンを確認
設定されているパスが以下のように自分のホームディレクトリを指していれば、
正しく設定ができています。
* system (set by /Users/[user_home]/.rbenv/version)
3.rubyのインストール
実際に使用するRubyをインストールします。
インストール可能なバージョンの確認
rbenv install -l
Rubyのバージョンをインストール
rbenv install 2.0.0p451
4.インストールの確認
ruby -v ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]
ダウンロードした、Rubyのバージョンを指していれば正しくインストールされています。
インストールしたRubyの実行ファイルパスも確認してみます。
which ruby /Users/[user_home]/.rbenv/shims/ruby
.rbenv配下にインストールされていれば大丈夫です。
rubyのバージョンを切り替える時
rbenv global [バージョン] rbenv rehash
rehashしてあげないと、私の環境ではPATHが切り替わりませんでした。
【Android】youtubeの動画を再生する
Androidで、youtubeの動画を再生するには大きく分けて2つの方法があります。
1つは、youtubeアプリに対してIntentを飛ばす方法で、
例えば下記のように記載することで直接youtubeアプリを起動することができます。
Intent intent = new Intent(Intent.ACTION_SEARCH); intent.setPackage("com.google.android.youtube"); intent.putExtra("query", "Android"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
もう一つは、YouTube Android Player API
を使用する方法です。
これは、googleが提供しているAPIで、自分のアプリ内でyoutubeの再生機能を利用することができます。
(youtubeを起動はしない)
今回は、YouTube Android Player API
を使用して、
アプリ内で動画を再生する方法を試してみました。
API Keyを作成する
まずは、Google APIをアプリ上で実行するために、
Google Developlers Consoleにて、
APIKeyを取得します。
1.新規プロジェクトを作成
2.Youtube APIを有効にする
APIs & auth
を選択し、 YouTube Data API v3
をONにします。
3.API Keyを作成する
APIs & auth
>Credentials
を選択、 Public API access
にあるCREATE NEW KEY
ボタンを押下します。
キー種別の選択ダイアログが表示されるため、 Android key
を選択します。
続いて、表示されるテキストボックスにAndroidに組み込むkeystoreのSHA1のフィンガープリントおよび、
API実行を許可するアプリケーションのパッケージ名を入力します。
入力フォーマットは、[フィンガープリント];(セミコロン)[パッケージ名]となっています。
CREATE
ボタンを押下すれば、API key
の作成は完了です。
完了後に画面に表示されているAPI key
をAndroidアプリケーションに組み込んで使用します。
例: 9F:DA:1F:03:71:4B:1E:BD:90:76:51:AB:26:0C:B7:41:2F:94:AB:C6;com.sample.gcmtest
※ keystoreのフィンガープリントを確認するには
■ 使用するコマンド
keytool -exportcert -alias androiddebugkey -keystore [署名するkeystoreのパス] -list -v
今回は、Android ADTで用意されているデバッグ用のkeystoreで確認します。
デバッグ用のkeystoreは、[ユーザーHOME]/.android/debug.keystore
にデフォルトkeyが配置されていて、
パスワードは、android
です。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
上記のコマンド実行結果から、表示されるフィンガープリントのSHA1
の文字列をコピーすればOKです。
Androidアプリの実装
今回は、youtubeのプレーヤーをFragmentとして使用するサンプルアプリを実装します。
1.YouTube Android Player API
の最新バージョンをダウンロード
YouTube Android Player APIの最新版をダウンロードし、libs/
にあるYouTubeAndroidPlayerApi.jar
をプロジェクトへインポートします。
2.AndroidManifestの実装
下記、パーミッションを追加します。
<uses-permission android:name="android.permission.INTERNET"/>
3.layout.xmlにYouTubePlayerFragment
を定義
今回は、動画の再生に使用するYouTubePlayerFragment
をlayout.xmlに定義して使用します。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:name="com.google.android.youtube.player.YouTubePlayerFragment" android:id="@+id/youtube_fragment" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
4.Activityの実装
下記サンプルでは、Activityに登録されたYouTubePlayerFragment
インスタンスを、
上記で取得したAPI Key
で初期化しています。
また、初期化のコールバックを取得するために、YouTubePlayer.OnInitializedListener
を実装し、
初期化が成功したタイミングでプレーヤーの実行準備を行っています。
APIの詳細については、YouTube Android Player API - リファレンス ガイドを参照してください。
public class MainActivity extends Activity implements YouTubePlayer.OnInitializedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // フラグメントインスタンスを取得 YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment); // フラグメントのプレーヤーを初期化する youTubePlayerFragment.initialize("[API Key]", this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onInitializationFailure(Provider provider, YouTubeInitializationResult error) { // プレーヤーの初期化失敗時に呼ばれる } @Override public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) { // プレーヤーの初期化成功時に呼ばれる if (!wasRestored) { // 指定された動画のサムネイルを読み込み、プレーヤーがその動画を再生する準備を行う player.cueVideo("nCgQDjiotG0"); } } }
これだけで、アプリ内でyoutubeの動画を再生することができます。
他にも、ウィジェットなどのAPIも用意されているようなので、
色々試して見たいと思います。
参考リンク
https://developers.google.com/youtube/android/player/ https://developers.google.com/youtube/android/player/setup
Appiumを使ってRubyでAndroidアプリのテストを行う①
Appiumをインストール
sudo npm install -g appium npm install wd appium &
Appiumリポジトリをクローン
git clone https://github.com/appium/appium.git
テスト実行環境を確認
以下のスクリプトを実行して、テストに必要な環境の構築を行います。
ビルドパスやコマンドが不足している場合は、必要に応じてインストールします。
cd appium ./reset.sh --verbose
参考までに私の環境でエラーになった内容について記載しておきます。
[mavenがインストールされていなかった]
Homebrewでインストール。
brew install maven
[androidSDKのAPI Level16がインストールされていなかった]
Android SDK Managerから指定のAPIをインストール。
android
テスト実行環境をインストール
今回は、Rubyでテストを行うつもりなので以下を実行します。
cd appium/sample-code/examples/ruby bundle install
ここでハマったのが、bundle install
時に以下のエラーでて、ビルドが失敗していました。
An error occurred while installing ffi (1.9.3), and Bundler cannot continue. Make sure that `gem install ffi -v '1.9.3'` succeeds before bundling.
原因は、Xcode 5.1 へのアップデートによってclangが更新されたためとのことです。
下記のサイトを参考にさせていただき、
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install
とすることで、成功しました。
参考サイト:
【Mac】clang によるビルドエラー【Xcode 5.1】
rspecのインストール
Appiumの実行には、Rspec
を使用するため、gemでインストールしておきます。
gem install rspec
ここまでで、テストを実行する準備が整いました。
次回は、具体的にどうやってテストを書けばいいかを書いていきたいと思います。
参考サイト
http://qiita.com/2or3/items/261862eebbccc436265b
http://iti.hatenablog.jp/entry/2013/12/25/085726
【Android】NFCを使ってみる① (読み込み処理)
NFC(Near Field Communication)は、近距離無線のテクノロジーで、
Android 2.3からサポートされている技術です。
また、Android 4.0からは、Android Beam
という機能が加わり、
2つのAndroid搭載のデバイス間でのピアツーピアのデータ交換が可能となりました。
アプリケーションへの NFC タグのディスパッチ方式
AndroidデバイスがNFCを検知すると対応するインテントを発行します。
NFCに関する起動インテントには、下記の3種類があり、
それぞれの優先度が決まっています。
[ACTION_NDEF_DISCOVERED]
読み込んだタグが、NDEF(NFC Data Exchange Format)
ペイロードを持つ場合、
このアクションが定義されたアクティビティにIntentが通知されます。
起動インテントの優先度としては、最も高く、
このアクションでアクティビティが起動した場合は、ACTION_TECH_DISCOVERED
またはACTION_TAG_DISCOVERED
で登録されているアクティビティがあっても起動されません。
[ACTION_TECH_DISCOVERED]
ACTION_NDEF_DISCOVERED
インテントをハンドルするアクティビティが登録されていない場合には、
このアクションでが定義されたアクティビティにIntentが通知されます。
優先度としては、ACTION_NDEF_DISCOVERED
の次に高いです。
[ACTION_TAG_DISCOVERED]
このインテントはACTION_NDEF_DISCOVERED
または、ACTION_TECH_DISCOVERED
インテントをハンドルするアクティビティがない場合に開始されます。
読み込みサンプル
以下のサンプルは、NFCカードをかざすとNFCの識別子情報を読み取るサンプルになります。
Android Manufestの定義
Android Manufest
には、NFCを使用するためのパーミッションの定義と、
各ディスパッチ方式に対応するintent-filter
の定義が必要です。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.nfcreadsample" android:versionCode="1" android:versionName="1.0" > <!-- NFCを使用する為のパーミッションを付与 --> <uses-permission android:name="android.permission.NFC" /> <!-- Google Playで、NFCハードウェアを持つデバイスのみに制限するための 機能を定義 --> <uses-feature android:name="android.hardware.nfc" android:required="true" /> ・・・ <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.test.nfcreadsample.MainActivity" android:label="@string/app_name" > ・・・ <!-- NFC NDEF text --> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <!-- NFC TECH --> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- ACTION_TAG_DISCOVEREDで登録するフィルタを参照する --> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> <!-- NFC TAG --> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
ACTION_NDEF_DISCOVERED
インテントをフィルタするには、
フィルタしたい対象データのタイプを加えたインテントフィルタを宣言します。
上記では、ACTION_NDEF_DISCOVERED
フィルタにtext/plain
のMIMEタイプを付加しています。
ACTION_TECH_DISCOVERED
インテントをフィルタさせる場合は、
XMLリソースファイルを作成し、tech-listセットの中にアクティビティがサポートするNFCのフォーマット形式を定義します。
作成したXMLファイルは、<project-root>/res/xml
ディレクトリ配下へ保存します。
以下は、tech-listリソースファイルのサンプルです。
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.IsoDep</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcA</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcF</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcV</tech> </tech-list> <tech-list> <tech>android.nfc.tech.Ndef</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NdefFormatable</tech> </tech-list> <tech-list> <tech>android.nfc.tech.MifareClassic</tech> </tech-list> <tech-list> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> </resources>
NFCを読み込む
下記では、起動Activityより受信インテントを受け取り、
NFCの起動によるものかを判定しています。
インテントがNFCのアクションである場合、
NfcAdapter.EXTRA_ID
というキーを使ってNFCのIDm(固有識別子)を読み込んでいます。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); String action = intent.getAction(); setContentView(R.layout.activity_main); // NFCかどうかActionの判定 if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) { // IDm(固有識別子)を表示させる String idm = getIdm(getIntent()); if (idm != null) { TextView idmView = (TextView) findViewById(R.id.idm); idmView.setText(idm); } } } /** * IDmを取得する * @param intent 受信インテント * @return IDm文字列 */ private String getIdm(Intent intent) { String idm = null; StringBuffer idmByte = new StringBuffer(); byte[] rawIdm = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); if (rawIdm != null) { for (int i = 0; i < rawIdm.length; i++) { idmByte.append(Integer.toHexString(rawIdm[i] & 0xff)); } idm = idmByte.toString(); } return idm; } }