アニメーションを順番に実行
function(){...}
を省くとさらに簡潔になる
$('#big')
.hide(1000)
.show(2000);
これなら
1秒画像を隠してから
2秒画像を再表示
このように
jQueryでアニメーションメソッドを
メソッドチェーンで連結して呼び出すと
上から順番に実行する
メソッドチェーンにしても
同時にアニメーション適用にならないので
注意
スポンサーサイト
アルバムアプリは AndroidのSDカードにとりためた画像をgalleryに一覧表示し みたい画像をタップする タップされた画像は imageviewに大きく表示 同時に Textviewに撮影した時刻を表示 galleryのUIには imageviewを使う ただし、画素数が大きいため 大きな画像を使うと OutOfMemoryの例外が、発生する このため、BitmapFactoryクラスで 画像の大きさを変更する
カーソルメソッドのメモ moveToFirst() 先頭のレコードに移動 レコードが存在しないならfalse getColumnIndex() カラム名からインデックスを返す getString() フィールド値を取得 getメソッドは、データ型のぶん用意済み getInt() getFloat() などなど moveToNext() 次のレコードに進む 次のレコードがないならfalse cur.close() カーソルを閉じる
連絡先にアクセスするには Contacts.CONTENT_URI を使う これには android.provider.ContractsContract.Contracts をインポートする 今回は ボタンのonClickのときに呼び出す getContractsData() が処理の中心 コンテントプロバイダーからのデータ取得処理は RDBへのSQL発行に近い 流れとしては managedQuery()でカーソル取得 ループ処理でカーソルから順に レコードを読み込み フィード値を取得 注目するのは managedquery()の引数 uri コンテントプロバイダーのURI projection 取得したいカラムのリスト selection レコードの選択条件 SQLでいうと WHERE selectionArgs selectionの引数配列なので複数指定できる sortOrder 並べ替え ASC 昇順 DESC 降順 SQLでいうと ORDER BY
エミュレータへのデータ追加 サンプルアプリのため エミュレータにデータを追加しました 今回は連絡先の追加なので アプリの中から Phone をタップして エミュレータのmenuボタンを押して New contact を押して必要なデータを入力しました
コンテントプロバイダーに問い合わせするには Activityクラスの managedQuery() を使うか ContentResolverクラスの query() を実行 どちらを使っても、同じ引数のセットを受け取り Cursorオブジェクトを返す これは managedQuery() は 内部的に ContentResolverクラスのquery() を呼ぶから managedQuery()は アクティビティに カーソルの管理を委ねる このめ、ほとんどの場合は managedQuery()を使っている
コンテントプロバイダで使える代表的URI CallLog.Calls.CONTENT_URI 着信履歴、発信履歴の通話ログのデータ ContactsContract.Contacts.CONTENT_URI 連絡先 ContactsContact.CommonDataKindsPhone.CONTENT_URI 電話番号 ContactsContract.CommonDataKinds.Email.CONTENT_URI メールアドレス MediaStore.images.Media.INTERNAL_CONTENT_URI 端末内部のメディアに保存した画像データ MediaStore.images.Media.EXTERNAL_CONTENT_URI SDカードなどの外部メディアに保存した画像データ MediaStore.Audio.Media.INTERNAL_CONTENT_URI 端末内部のメディアに保存したオーディオデータ MediaStore.Audio.EXTERNAL_CONTENT_URI SDカードなどの外部メディアに保存したオーディオデータ MediaStore.Video.Media.INTERNAL_CONTENT_URI 端末内部のメディアに保存した動画データ MediaStore.Video.Media.EXTERNAL_CONTENT_URI SDカードなどの外部メディアに保存した動画データ Browser.BOOKMARKS.URI ブラウザーのブックマークデータ Browser.SEARCHS_URI ブラウザーの検索履歴データ Settings.System.CONTENT_URI 端末の様々な設定データ Settings.Secure.CONTENT_URI セキュリティーに関する端末の設定データ INTERNAL_ なら端末内部 EXTERNAL_なら SDカードとかの外部メディア と覚えると覚えやすいかも
HTTP通信の代表的ステータスコード SC_OK 値は200 リクエスト成功 SC_MOVED_PERMANENTLY 値は301 リクエストされたリソースは新しい恒久的なURIを割り当てられた SC_MOVED_TEMPORARY 値は302 リクエストされたリソースは一時的に異なるURIに、属する SC_FORBIDDEN 値は403 サーバーはリクエストを理解したが、リクエスト実行を拒否 SC_NOT_FOUND 値は404 サーバーはリクエストURIと一致するものを見つけられなかった SC_INTERNAL_SERVER_ERROR 値は500 サーバーはリクエスト実行を妨げる予期しない状況に、遭遇 SC_SERVICE_UNAVAILABLE 値は503 サーバーは サーバーの一時的な過負荷 あるいはメンテナンスのため 現在、リクエストを扱えない ちなみに、Androidアプリで HTTP通信するなら インターネットアクセス権限が必要なので 注意
オプションメニュー生成 オプションメニュー生成には onCreateOptionsMenu() を使う onCreateOptionsMenu()は superクラスの onCreateOptionsMenu() を オーバーライドする必要がある メニュー追加の構文は Menu.add(int groupId,int itemId,int order ,CharSequence title) int groupIdがグループID int itemId がアイコンID int order がアイテムの順序 CharSequence title が表示するタイトル Menu.add()は MenuItemオブジェクトを返すので setIcon() で アイコンを追加 ちなみに android.R.drawable.ic_menu_delete android.R.drawable.ic_menu_close_clear_cancel はAndroidで用意されているアイコン 自作のを使いたいなら res/drawable に自作アイコンを置けばいい アイコンの詳細は http://developer.android.com/intl/ja/guide/practices/ui_guidelines/icon_design_menu.html を参照 オプションメニューがタップされたら onOptionsItemSelected() が実行される 設定削除するなら editor.clear() で プリファレンスのデータをすべて削除 終了するときには finish() でActivityを終了
jQueryの主なアニメーション機能 show 非表示になっている要素を徐々に表示 hide 表示の要素を非表示に toggle 要素の表示、非表示を交互に切り替え slideDown 非表示の要素をスライドさせつつ表示 slideUp 表示中の要素をスライドさせつつ非表示に slideToggle スライドアップ、スライドダウンを交互に実行 fadeIn 非表示の要素をフェードイン faeOut 表示中の要素をフェードアウト animate 指定されたパラメータに従い アニメーション実行 animate以外のアニメーション効果は ほぼ同じ書き方で呼び出しできます 一番簡単なアニメーション機能の呼び出しの構文は $(セレクター).アニメーションメソッド(時間) アニメーションメソッドには show slideToggle hide などを指定して 時間はミリ秒単位でしていします 例えば 表示中の画像を2秒隠すなら $('img').hide(2000); ちなみに、時間の指定はミリ秒だけじゃなく slow normal fast という指定もできる
プリファレンスの削除 プリファレンスのデータを削除するには remove()にキーを指定し実行します 保存の時と同様に commit() で削除を決定します 例えば SharedPreferences pref = getSharedPreferences("MainActivity",MODE_PRIVATE); SharedPreferences.Editor editor=pref.edit(); editor.remove("save"); editor.commit(); また、複数のキーと値を登録しているなら clear() でまとめて消去できます SharedPreferences pref=getSharedPreferences("MainActivity",MODE_PRIVATE); SharedPreferences.Editor editor=pref.edit(); editor.clear(); editor.commit();
プリファレンスの読み込み データの読み込みは 保存と、同様 SharedPreferencesオブジェクトを取得 これも 読み込みのプリファレンスのファイル名がアクティビティ名と同じなら getPreferences()が使えます 読み込みをする toString()は 第一引数にはキー 第2引数にはデフォルト値 つまり EditTextなら edit.setText(pref.getString("save",""); これだと、 保存されているデータがないなら 中身を空欄にするということ ちなみに、putでデータ型が用意されていたように getでも getBoolean() getFloat() getInt() getLong() getString() も用意されていています ちなみに、型を間違えると 例外である ClassCastException が発生します
プリファレンスへの保存 プリファレンスへ保存するには edit() で SharedPreferencesEditorオブジェクトを取得 SharedPreferences.Editor editor = pref.edit(); 次に、putString でキーと共に保存 editor.putString("save",editor1.getText().toString()); ちなみに、putするメソッドは データ型のぶんすでに用意されていて putBoolean() putFloat() putInt() putLong() putString() があります こらで、データを保存します 値を書き込みするのは commit() を使います プリファレンスへの保存 プリファレンスへ保存するには edit() で SharedPreferencesEditorオブジェクトを取得 SharedPreferences.Editor editor = pref.edit(); 次に、putString でキーと共に保存 editor.putString("save",editor1.getText().toString()); ちなみに、putするメソッドは データ型のぶんすでに用意されていて putBoolean() putFloat() putInt() putLong() putString() があります こらで、データを保存します 値を書き込みするのは commit() を使います
プリファレンスへのアクセスについて プリファレンスにアクセスするには contentクラスの getSharedPreferences() で SharedPreferencesオブジェクトを取得 引数はファイル名を""で囲んだもの と モード 例えば getSharedPreferences("MainActivity",MODE_PRIVATE); モードは共有モードの指定で MODE_PRIVATE ほかのアプリからアクセス不可 MODE_WORLD_READABLE 他のアプリから読み込み可能 MODE_WORLD_WRITEABLE 他のアプリから書き込み可能 ちなみに、もし プリファレンスのファイル名が アクティビティ名と同じなら getPreferences()が使える これはアクティビティ名をファイル名として 使うので モード指定だけでよくなる 例えば SharedPreference pref=getPreferences(MODE_PRIVATE);
プリファレンスについて Androidで使える簡単なデータの保存方法で これはキーと値の組み合わせでデータを保存する方法 プリファレンスで使えるデータ型は boolean float int long String になります
イベントとイベントリスナーのまとめメモ イベントは マウスクリックとか ボタンを押したなどの動作のこと jQueryなら イベント名 function(){ ... } というようにして イベント処理を定義できる たとえば 'click',function(){ ...} というかんじ jQueryが対応してないイベントでも on()を使えば処理できる ちなみに、バージョンが古いとbindで 紹介されてるケースが多いかも マウスを乗せたり離したりを まとめて制御するhover() マウスクリックを交互に処理できるtoggle() イベントを1回だけ処理するone() これらを覚えておくと、さらに便利になります イベントが発生すると イベントオブジェクトが作成され イベントリスナーに渡される このイベントオブジェクトは イベントに関する様々な情報を保存している
HTC j(ISW13HT)で実機デバッグの設定です
まず、設定のアイコンをクリックし
セキュリティー を選び
デバイス管理の
不明な提供元
にチェックをいれます
次に
設定の中の
開発者向けオプション
を押して
USBデバッグ
にチェックをいれます
ここまでできたら
次に、USBでスマホを差して
端末で
lsusbコマンドでベンダーIDを調べます
HTC j の場合
Bus 003 Device 005: ID 0bb4:0cf2 High Tech Computer Corp.
と表示され
0bb4:0cf2
のところになります
次に
http://www.kojion.com/ubuntu/index.php?id=1 を参考に
設定ファイルの作成します
sudo vim /etc/udev/rules.d/51-android.rules
で
ファイルを新規作成します
sudo つけないと書き込みできないので注意
SUBSYSTEM=="usb",ATTRS{idVendor}=="
0bb4 ",ATTRS{idProduct}=="
0cf2 ",MODE="0666"
を追記して保存します
idVendor
idProduct
の値は
lsusbで確認します
つぎに adb が使えるようにパスを通します
vim .bashrc
でファイルを開き
最下行へ
export PATH=$PATH:~/android-sdk-linux/platform-tools/:~/android-sdk-linux/tools/
を追記
source .bashrc
で設定反映
adb devices
を実行
List of devices attached
SHTBF108782 device
となればok
adb devices
List of devices attached
???????????? no permissions
なら
adb kill-server
adb start-server
で再び
adb devices
これでもダメなら
sudo vim /etc/udev/rules.d/51-android.rules
で内容を確認します
テーマ : Linux
ジャンル : コンピュータ
インテントの代表的なAction と Uri ACTION_VIEW http://アドレスで指定 Webブラウザーで指定のURLを表示 ACTION_VIEW geo:latitude,longitude で指定 指定した latitude 緯度 longitude 経度 の地図を表示します ただし、Androidmanifest.xml へ インターネットアクセス権限 と ロケーションサービス使用権限をつけないと動作しないので注意 ACTION_VIEW content://contacts/people/1 アドレス帳の1番目の情報を表示 ACTION_DIAL tel:電話番号 で指定 指定した番号のダイヤルウィンドウを、開きます ACTION_CALL tel:電話番号 指定した番号に、電話をかけます ただし、これも Androidmanifest.xmlに 電話を、かけるための権限をつけないとダメです ACTION_SENDTO mailto:アドレス で指定 メールを送信します これらは代表的なもので 実際にはまだまだたくさんあります
AndroidでWebアプリのプログラミング の環境を整えています 外出時や電車の中などで コードを書けないか試してみました 便利なエディタ Android web editor 有料版 を購入しました いままでは Jota text editor がメインでしたが さすがに、ソースコードを すべて手打ちは疲れます このアプリで タグを打つことができるようになりました 黄色はHTML 青がPHP 赤がjava script 緑がCSS となります ただし、すべては入っていないため、ある程度は 自分で打たないとだめです また、このエディタを使い 新規ファイルで HTMLや PHPファイルを作成すると テンプレートで作成もできます しかし、HTC J(ISW13HT)の場合 画面の大きさと ソフトウェアキーボードのデザインにより 残念ながら非常に見えにくくなります 今回、入力アプリで検証したのは デフォルトでインストールされているアプリ Google日本語入力 hackers keybord ATOK です 検証結果から ATOK以外なら入力に問題はありませんでした これは、ATOKのみ、画面が大きかったからです これで、テキストエディタには Android web editor ファイル転送には andFTP pro サーバー管理を connect bot で公開鍵認証ログインで操作 ここまではできるようになったので また追加可能になったらまとめてみます
2012 年 9月号の日経Linux は付録DVDがなく
ダウンロードするようになっています
ダウンロード先は
http://nlinux.jp/2012/09/article/ となります
ユーザ名、パスワードが必要ですが
書籍の最後のほうに記載されているので
これを使い、ダウンロードすることができます
注意点としては
webkit関連のブラウザーでは文字化けを起こすことです
chrome だとダメなので
Firefox を使いました
テーマ : Linux
ジャンル : コンピュータ
伊勢神宮に旅行です まず、交通機関ですが 電車を使いました 毎回、廃止が噂される青春18切符ですが 今年も無事に購入できました この切符はJRならば 乗り降り自由の切符で5枚つづりで売られてます なお、売り場は駅や緑の窓口などとなります 今回、快速みえを使い、伊勢市までいきました ちなみに、正規料金なら 近鉄の急行でいくほうがやすくなります 近鉄だと1410円ぐらいです ちなみに、伊勢市や鳥羽の JRの駅で4枚つづりの切符が売られていて こちらの場合、一枚あたりに換算すると 1400円の切符が売られてます ただし、まとめて購入なので 実際には5600円です 伊勢神宮は 外宮と内宮と二カ所あり距離はかなり離れているため 外宮と内宮の移動にはバスを使います 値段は420円 ただし、帰りのバスが夜6時ぐらいになるとほとんどないので 帰りの時間には要注意です 近くのおかげ横町では 有名な赤福があります 夏場には かき氷赤福がでてますが お腹の弱めな私にはちょっと無理でした 私がたべたのは 赤福のふつうの方で3個で280円です お茶もサービスしてくださるので 美味しく頂けました おかげ横町にある銀行のATMでは 明細におみくじがついてます いろいろと楽しめましたが 一つ、気になることもありました それは iPod touchの乗り換え案内のアプリ これで、いままでは特に不便はありませんでしたが 今回名古屋から伊勢市まで乗り換えを 調べたとき、なぜか必要のない乗り換えが表示されました 本来、近鉄の急行で伊勢市まで行けますが なぜか途中で乗り換えるように表示されました カーナビと同じで、またまだ万能ではないので 自分で調べることも必要と感じました 最近はお盆などで忙しかったので ゆっくりしてみます
telnetでメール送受信処理確認 telnetを使えば 端末上からメールサーバ (POP3サーバ) にアクセスできる ただし、ポートがあいてないとだめだけど まずは手入力 暗号化なしの110ポート telnet サーバIP 110 例えば telnet 192.168.1.120 110 これで、+OKの応答まち 応答を受信したら USERコマンドで ユーザ名 PASSコマンドで パスワード を送信 これで、どちらにも +OK の応答が返ってくれば接続完了 STATコマンドで 受信されているメッセージを確認し PTERコマンドで メッセージ受信 受信が終わったら QUITコマンドで POP3サーバとの接続を切る
POP3のセッション内の処理 1 認証をリクエストして応答 2 メールの件数をリクエストして結果の表示 3 メールのヘッダ一覧をリクエストして応答 4 何番と何番のメールをほしいとリクエスト 5 指定したメールの受信 6 終了を送って応答
ネイティブからwebviewへ通知 ネイティブ側からwebviewへイベントを通知するのは Webviewオブジェクトの evalJS()を使う evalJS() は javascriptのプログラムコードを 引数として渡す evalJS() で渡された文字列は webview内のjavascriptとして扱われる 基本的には あらかじめwebview側のjavascript で呼び出したい機能を定義 その上で webview.evalJS() の引数に 処理を 実行するjavascriptを記述 ただし、これは予想できるように XSSの弱点が存在する もし、web APIとかを使い 外部から取得したデータを基に 文字列を組み立てるなら 無害化するなどしないと、Webサイト同様に改ざんされるリスクがある
ネイティブ側でイベント受け取り Webview側のアプリ本体になる app.js にイベントハンドラーを設定 イベントハンドラーの設定では Titanium.Appオブジェクトの addEventListener() を使う addEventListener()の 第1引数に 作成したカスタムイベント名 第2引数に イベントハンドラーを渡す このイベントハンドラーの 第1引数eには fireEvent の第2引数が渡される 今回は イベントが受け取れているかどうかを トーストで確認 トースト通知は TI.UIオブジェクトの createNotification() で生成 引数には 表示する時間を durationプロパティ でミリ秒単位で指定します ちなみに、ミリ秒は 1000ms=1秒です 1.5秒表示したいなら duration: 1500 となります 表示するテキストについては messageプロパティで設定 これも message : '表示したいメッセージ' というように書きます 文字列を'で囲むのを忘れずに 作ったトーストは show() で画面に表示します
onメソッド解説 on()は 第1引数にイベント名の文字列 第2引数にイベントハンドラー を設定 今回は タッチして動かしたときに使う touchmoveイベント これのイベントハンドラーを設定 コードをみてわかるように jQueryを使っている おさらいすると $は jQueryを呼び出すのに使う イベントハンドラーでは タッチされた位置や イベントの発生源などが格納されている オブジェクトe のメソッドとして preventDefault() を、使っている ちなみに、eじゃなくてもできるらしいけど 実際にはほとんどeなので、 慣例に倣った方がコードが読みやすいし メンテもしやすい preventDefault()は イベントのデフォルト動作を無効化 preventDefault()で無効化した touchmoveイベントのデフォルトの動作は 画面スクロール機能 今回はこれをけしたいので これを消してみました これで、スクロール機能が無効になります
スクロールの抑制 Titanium MobileのWebviewでは 表示画面の右側に スクロールバーがでることがある これがアプリだと 違和感があるため javascriptでこの機能を 停 止する 画面スクロールの禁止は アプリ起動直後にする 具体的には ページの枠組みであるDOMの判別が終了したときに呼ばれる処理として記述する DOMは Document Object Model の略 DOMの構築終了 ボタンクリック などの特定のタイミングを条件に実行する機能をイベントという ボタン、リンクという ページの要求にイベントを追加するのは DOMの構築後でないとダメ イベント作成には documentオブジェクトの on() を使う on()は イベントと そのイベントが発生したときに 呼ばれる処理 つまり イベントハンドラーを 設定するメソッド
タップ時の強調表示を消す webviewでUI作成のときの問題点 それは 画面をタップしたときのハイライト ハイライトは強調表示のこと この効果は リンクボタンとかをタップすると ユーザーにわかりやすく知らせるために 色が変わるというもの これは、スマホでWebコンテンツを 表示すると体験できる ハイライトはネットをみるだけなら問題ないけど アプリにすると微妙になる 原因は アプリの挙動がサイト EXILE CATCHY BEST 2008 アプリっぽくないから ハイブリッドアプリのUIの場合 CSS3を使って Webコンテンツ独特のクセをつぶしていく ハイライトを無効化するには -webkit-highlight-color これはそのなの通り タップ時のハイライトの色を指定する これの関数は 左から 赤 緑 青 透明度 となる 透明度は0~1で指定して 0なら透明 1なら不透明 つまり、rgba(0,0,0,0) なら無色透明になる これで ハイライト無効になる タップ時の強調表示を消す webviewでUI作成のときの問題点 それは 画面をタップしたときのハイライト ハイライトは強調表示のこと この効果は リンクボタンとかをタップすると ユーザーにわかりやすく知らせるために 色が変わるというもの これは、スマホでWebコンテンツを 表示すると体験できる ハイライトはネットをみるだけなら問題ないけど アプリにすると微妙になる 原因は アプリの挙動がサイト EXILE CATCHY BEST 2008 アプリっぽくないから ハイブリッドアプリのUIの場合 CSS3を使って Webコンテンツ独特のクセをつぶしていく ハイライトを無効化するには -webkit-highlight-color これはそのなの通り タップ時のハイライトの色を指定する これの関数は 左から 赤 緑 青 透明度 となる 透明度は0~1で指定して 0なら透明 1なら不透明 つまり、rgba(0,0,0,0) なら無色透明になる これで ハイライト無効になる
今回は日経Linux 2012 8月号の
サンプルを使いました
最初に
cp -p /media/LIN201208/article/rensai_android/app.js .
で
ファイルをコピー
次にの
gedit app.js
をコピーするため
Titanium Studio パッケージエクスプローラで
プロジェクト名 > Resources > app.js
でファイルを開きます
ファイル拡張子をみたまま、
java script です
このファイルの中身をすべて削除し
app.js をコピペします
titanium mobile のUI部品生成は
Titanium.UI.create部品名
という関数を作成します
もし、ボタンを作るなら
Titanium.UI.createButton({
設定
})
というかんじです
ボタンを押したときの処理は
addEventListener を使います
このあたりも
java script に近いかも
具体的には
button.addEventListener('click',function(){
//クリックしたときの処理
});
となります
'click'
はイベント名
function(){ ...}
の部分は
イベントが発生したときに実行される関数
通称イベントハンドラー
です
今回使用した関数もメモしてみました
Math.random()
0以上1未満の数をランダムにかえす
Math.floor()
小数点以下の数を切り下げて整数をえる
これで、
0から「配列の長さ-1」
までの範囲の整数を乱数で得られる
テーマ : プログラミング
ジャンル : コンピュータ
./Titanium_Studio/TitaniumStudio
で
Titanium Studio を起動
File > new > Titanium Mobile Project
で設定画面を開きます
ただし、起動したときにネット接続していないと
このTitanium studio がログイン画面になり
使えません
起動したら
Project name : FirstProj
ここへはプロジェクト名
App Id
は
java でいうパッケージ
メルアドかドメインを反対から
入力します
test@example.ne,jp
なら
jp.ne.example.test
というように書きます
Company/Personal URL
ここには自分のweb site URl
もしなければ
http://localhost
これで、helloworld のように
もとが完成です
あとは
プロジェクトを右クリックして
Run As > Android Emulator
でエミュレータが起動します
CPUの性能によりかなり時間差がありますが
無事に成功すると
アプリが起動します
テーマ : プログラミング
ジャンル : コンピュータ