ふと気がついたら、自作アプリ、ダウトの総ダウンロード数が1万を超えていました。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.doubt
それだけ興味を持って頂けたということで、感謝感謝です。
さて、次回作を作ると宣言して、早2ヶ月近く経過していますが、、
すみません、今のところ全く進捗なしです^^;
でもそろそろ稼働しないと、、ですね。
2012年10月22日月曜日
Adstir 実装方法変更メモ
広告振り分けでAdstir を使っていますが、ちょっと前に実装方法が変更されています。
修正ついでに更新したので、エラーになったところをメモ。
onDestroy() に、
AdstirTerminate.init(this);
を追加すると、init に赤線。(※Eclipse 使用)
The method init() in the type AdstirTerminate is not applicable for the arguments
新しいSDK が反映されてないのかな?と、プロジェクトをクリーン。(※上部メニューバーのproject からClean を実施。)
すると、init の赤線は消えたものの、今度は、AdstirTerminate と、以下に赤線。
import com.ngigroup.adstir.AdstirTerminate;
import com.ngigroup.adstir.AdstirView;
上記2つのインポートを削除してから、
AdstirTerminate の赤線をポイントして、選択肢からimport ~ を選択。
import com.ad_stir.AdstirTerminate;
が追加され、エラーは消えてくれました。
修正ついでに更新したので、エラーになったところをメモ。
onDestroy() に、
AdstirTerminate.init(this);
を追加すると、init に赤線。(※Eclipse 使用)
The method init() in the type AdstirTerminate is not applicable for the arguments
新しいSDK が反映されてないのかな?と、プロジェクトをクリーン。(※上部メニューバーのproject からClean を実施。)
すると、init の赤線は消えたものの、今度は、AdstirTerminate と、以下に赤線。
import com.ngigroup.adstir.AdstirTerminate;
import com.ngigroup.adstir.AdstirView;
上記2つのインポートを削除してから、
AdstirTerminate の赤線をポイントして、選択肢からimport ~ を選択。
import com.ad_stir.AdstirTerminate;
が追加され、エラーは消えてくれました。
2012年8月31日金曜日
夏の近況
次のアプリの構想は頭にあるのですが、なかなか作業できる余裕がありませんでした。
そろそろ動き出そうと思っています。
N50 は正常稼働中です。
2012/10/22追記)
N50 は動いていますが、何だか動作が重いですね。いや元々かな?
想定以上に使える端末でした。
2012/10/28追記)
充電プラグの接触が悪くなったらしく、しっかり挿しても充電されないことがあります。
微妙に調整してやると、充電されるのですが。。
2012/11/14追記)
いよいよ充電が困難になってきました。
微調整では効果なく、強く挿し込むことでなんとか充電される状況です。
そろそろ動き出そうと思っています。
N50 は正常稼働中です。
2012/10/22追記)
N50 は動いていますが、何だか動作が重いですね。いや元々かな?
想定以上に使える端末でした。
2012/10/28追記)
充電プラグの接触が悪くなったらしく、しっかり挿しても充電されないことがあります。
微妙に調整してやると、充電されるのですが。。
2012/11/14追記)
いよいよ充電が困難になってきました。
微調整では効果なく、強く挿し込むことでなんとか充電される状況です。
2012年7月3日火曜日
2012年6月21日木曜日
七並べにジョーカーを導入
七並べにジョーカーを導入しました。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
それはいいのですが、、
広告SDKの影響でマルウェア認定される現象が発生しており、七並べでも確認しました。
※参考記事
http://android.dtmm.co.jp/app/33697
・avast! Mobile Security でのみ検出。
・同じ広告SDK(AdLantis)を導入しているアプリでも、検出されたり、されなかったり。
以上を考えると、誤検出と判断して間違いないと思います。
全く迷惑な話ですが、表示が出てしまう以上、放置するわけにもいかないので、該当の広告SDKは今回の更新で削除しておきました。
追記) どうしても一言。
上記の記事にあるアドランティスからのコメントですが、>
これは導入している開発者に直接メールするべきでは?>
今回の真偽はどうあれ、信用を失う対応だと思います。
追記2) 公式ページで
http://tn.adlantis.jp/
正式に誤検出であるとアナウンスされました。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
それはいいのですが、、
広告SDKの影響でマルウェア認定される現象が発生しており、七並べでも確認しました。
※参考記事
http://android.dtmm.co.jp/app/33697
・avast! Mobile Security でのみ検出。
・同じ広告SDK(AdLantis)を導入しているアプリでも、検出されたり、されなかったり。
以上を考えると、誤検出と判断して間違いないと思います。
全く迷惑な話ですが、表示が出てしまう以上、放置するわけにもいかないので、該当の広告SDKは今回の更新で削除しておきました。
追記) どうしても一言。
上記の記事にあるアドランティスからのコメントですが、>
これは導入している開発者に直接メールするべきでは?>
今回の真偽はどうあれ、信用を失う対応だと思います。
追記2) 公式ページで
http://tn.adlantis.jp/
正式に誤検出であるとアナウンスされました。
2012年5月15日火曜日
七並べの更新予定
七並べのメジャーアップデートを考えています。
内容はジョーカーの導入です。
賛否あると思いますので、設定で、あり・なしを選択できるようにします。
現在、具体的な実装を考えている段階なので、すぐには無理ですが、よろしければお待ち下さい。
05/28追記)
実装するには、基本のところから修正しないと無理と判明。
なんとかトライしてみますが、気長にお待ち下さい。
また、この関連で一部変更したバージョンをアップしました。
ダウト共々よろしくお願いします。
内容はジョーカーの導入です。
賛否あると思いますので、設定で、あり・なしを選択できるようにします。
現在、具体的な実装を考えている段階なので、すぐには無理ですが、よろしければお待ち下さい。
05/28追記)
実装するには、基本のところから修正しないと無理と判明。
なんとかトライしてみますが、気長にお待ち下さい。
また、この関連で一部変更したバージョンをアップしました。
ダウト共々よろしくお願いします。
2012年5月11日金曜日
新作!
新作公開しました。
トランプのダウトです。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.doubt
公開直後なのでバグなど残っているかもしれませんが、
ぜひ遊んでみて下さい。
トランプのダウトです。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.doubt
公開直後なのでバグなど残っているかもしれませんが、
ぜひ遊んでみて下さい。
2012年4月27日金曜日
N50 の改造 ~ セルスタンバイを無効にする編 ~
セルスタンバイがバッテリー消費していてウザイ、、ということで対処した記録。
TelephonyProvider.apk
Phone.apk
を削除。
※削除の方法は、こちら
http://yazakikenji.blogspot.jp/2011/12/n50android.html
を参考に。
削除後は、Phone.apk がエラーを吐きますが、そのまま再起動。
(ちなみに、これ削除するとマーケットへアクセス出来なくなるという記事も見ますが、自分の端末では大丈夫でした。)
さて、これだけでセルスタンバイが消えてくれるケースもあるらしい、、
が、自分はダメだった。
そこで、build.prop をイジってみる。。
ro.ril.hsxpa=1
ro.ril.gprsclass=10
を削除。
ro.com.android.dataroaming=false
に変更。
※正直、適当です。。
これでもダメだ~ということで、
先にこちら(マーケットへのフルアクセス編)
http://yazakikenji.blogspot.jp/2012/04/n50.html
の作業を実施。
終わってから、ふと再確認したら、セルスタンバイが無くなっていた~(嬉!
追記)
明らかにバッテリーのもちが良くなりました!
TelephonyProvider.apk
Phone.apk
を削除。
※削除の方法は、こちら
http://yazakikenji.blogspot.jp/2011/12/n50android.html
を参考に。
削除後は、Phone.apk がエラーを吐きますが、そのまま再起動。
(ちなみに、これ削除するとマーケットへアクセス出来なくなるという記事も見ますが、自分の端末では大丈夫でした。)
さて、これだけでセルスタンバイが消えてくれるケースもあるらしい、、
が、自分はダメだった。
そこで、build.prop をイジってみる。。
ro.ril.hsxpa=1
ro.ril.gprsclass=10
を削除。
ro.com.android.dataroaming=false
に変更。
※正直、適当です。。
これでもダメだ~ということで、
先にこちら(マーケットへのフルアクセス編)
http://yazakikenji.blogspot.jp/2012/04/n50.html
の作業を実施。
終わってから、ふと再確認したら、セルスタンバイが無くなっていた~(嬉!
追記)
明らかにバッテリーのもちが良くなりました!
N50 の改造 ~ マーケットへのフルアクセス編 ~
以前の記事
http://yazakikenji.blogspot.jp/2011/12/n50.html
で書いたように、
LINE とかtwicca とかのアプリが、N50だとインストールできなかったわけだが、一応できるようにしてみた。
※基本的には、こちらの記事が
http://yasusan.cocolog-nifty.com/green/2011/12/post-2295.html
まとまっているので参考にさせていただきました。
4つの手順が載ってますが、
1)GoogleMapAPIに関するファイルを入れる
3)build.propのro.fingerprintを偽装する
の2つだけでOKでした。
※注意点
①build.prop を rw にしないと編集できないよ。
②パーミッションを確認しよう。
こちらの記事
http://yazakikenji.blogspot.jp/2011/12/n50android.html
など参考にどうぞ~
http://yazakikenji.blogspot.jp/2011/12/n50.html
で書いたように、
LINE とかtwicca とかのアプリが、N50だとインストールできなかったわけだが、一応できるようにしてみた。
※基本的には、こちらの記事が
http://yasusan.cocolog-nifty.com/green/2011/12/post-2295.html
まとまっているので参考にさせていただきました。
4つの手順が載ってますが、
1)GoogleMapAPIに関するファイルを入れる
3)build.propのro.fingerprintを偽装する
の2つだけでOKでした。
※注意点
①build.prop を rw にしないと編集できないよ。
②パーミッションを確認しよう。
こちらの記事
http://yazakikenji.blogspot.jp/2011/12/n50android.html
など参考にどうぞ~
2012年4月16日月曜日
Android のセキュリティソフトについて
ようやくアンドロイドにもセキュリティソフトが充実してきたようですが、、
今、自分が使ってるのは、これ
https://play.google.com/store/apps/details?id=com.avast.android.mobilesecurity
です。
PCでもおなじみのフリーソフト、アバストです。
電池消耗も、あまりなく良い感じですよ。
追記)
アバストは大丈夫ですが、
やたら誤検出が多いソフトもあるようです。
どれとは言いませんが。。
追記2)
アバストでも誤検出がありました。
しかも直接被害を受けました。こんな記事を書いておいて皮肉ですが。。
でも使っていたおかげで早く気づくことができたのは、不幸中の幸いでしょうか?
今、自分が使ってるのは、これ
https://play.google.com/store/apps/details?id=com.avast.android.mobilesecurity
です。
PCでもおなじみのフリーソフト、アバストです。
電池消耗も、あまりなく良い感じですよ。
追記)
アバストは大丈夫ですが、
やたら誤検出が多いソフトもあるようです。
どれとは言いませんが。。
追記2)
アバストでも誤検出がありました。
しかも直接被害を受けました。こんな記事を書いておいて皮肉ですが。。
でも使っていたおかげで早く気づくことができたのは、不幸中の幸いでしょうか?
Iterator の謎
今まで何度かIterator を使おうとして失敗してきた。
コードは間違いないはず、、なのに何故か思ったような動作をしてくれない。
今度の新作でもテストして、やはりダメだった。
検索してみると、こんな記事
http://d.hatena.ne.jp/sugyan/20090817/1250461951
なども出てくるが、
どういう条件でサポートされるのか、まったく分からない。
結局、今度も力技?で実装することになりそうです。。
コードは間違いないはず、、なのに何故か思ったような動作をしてくれない。
今度の新作でもテストして、やはりダメだった。
検索してみると、こんな記事
http://d.hatena.ne.jp/sugyan/20090817/1250461951
なども出てくるが、
どういう条件でサポートされるのか、まったく分からない。
結局、今度も力技?で実装することになりそうです。。
2012年4月15日日曜日
Android でsleep 処理をしたい
Android でsleep したい時、以前の記事
でも書いたように、そのままsleep(1000); とすると、全体の処理が止まってしまう。
前の記事では、裏ワザ?でcountdowntimer を使ってましたが、本来のやり方?を確認。
参考
から抜粋
Handler mHandler = new Handler();
mHandler.postDelayed(mUpdateTimeTask, 100);
Runnable mUpdateTimeTask = new Runnable() {
public void run() {
//処理の続きを書く
}
};
そのままコピペしたので、変数名があれですが。。
postDelayed がキーみたいですね。
てか、試してないけど、これで本当にいけるかな?
2012年4月12日木曜日
七並べ更新
七並べを更新しました。
AIが弱いというコメントを結構頂きましたので、若干ですが強化しました。
設定とかで強弱を選択できるようにするという手もあるのですが、なるべく設定とか説明とかは付けたくなかったので、デフォルトで強化としました。
あとpermissionの設定で、READ_PHONE_STATEを外しました。
広告側で求めてきていたのですが、なるべく付けたくないという思いがありました。
ディベロッパー側でキッパリ拒否することも、改善のために必要なことかなと。
AIが弱いというコメントを結構頂きましたので、若干ですが強化しました。
設定とかで強弱を選択できるようにするという手もあるのですが、なるべく設定とか説明とかは付けたくなかったので、デフォルトで強化としました。
あとpermissionの設定で、READ_PHONE_STATEを外しました。
広告側で求めてきていたのですが、なるべく付けたくないという思いがありました。
ディベロッパー側でキッパリ拒否することも、改善のために必要なことかなと。
2012年4月11日水曜日
文字列定義のエラー
APKファイル作成時に、何やらvaluesフォルダに格納されてる文字列定義のファイルでエラーありで出来ないとでた。
エラー内容
「~ is not translated in ja」
⇒日本語に訳せないよ。
いやいやそんな必要ないから、、でもダメなの?
状況としては、
values
values-ja
フォルダで英語と日本語を分けている。
(正確にはデフォルトを英語として、日本語を別に用意している。)
そのstring.xml で、 英語・日本語共通の言葉もあるので、それはvalues-ja側のstring.xmlファイルでは省略していたが、そこでエラーになっていた。
また、arrays.xml で文字列をリストで定義していて、これも英語・日本語共通なので、そもそもvalues-ja側には用意していなかったが、こちらもエラーとされていた。
対策としては、
①共通であっても省略せずに記載。
②values-jaフォルダにもarrays.xmlを格納。(valuesフォルダにあるのと全く同じファイルだが。。)
これも以前は問題なかったので、アップデートの影響ですかね?
そういえば、manifest でもtargetSdkVersion 書けとか言われるようになりましたね。
ドンドン厳格というか、厳密になってきているのかな?
エラー内容
「~ is not translated in ja」
⇒日本語に訳せないよ。
いやいやそんな必要ないから、、でもダメなの?
状況としては、
values
values-ja
フォルダで英語と日本語を分けている。
(正確にはデフォルトを英語として、日本語を別に用意している。)
そのstring.xml で、 英語・日本語共通の言葉もあるので、それはvalues-ja側のstring.xmlファイルでは省略していたが、そこでエラーになっていた。
また、arrays.xml で文字列をリストで定義していて、これも英語・日本語共通なので、そもそもvalues-ja側には用意していなかったが、こちらもエラーとされていた。
対策としては、
①共通であっても省略せずに記載。
②values-jaフォルダにもarrays.xmlを格納。(valuesフォルダにあるのと全く同じファイルだが。。)
これも以前は問題なかったので、アップデートの影響ですかね?
そういえば、manifest でもtargetSdkVersion 書けとか言われるようになりましたね。
ドンドン厳格というか、厳密になってきているのかな?
2012年4月10日火曜日
新作の予定など
今週から本格的に新作のコーディングを開始しました。
今月中(GW前)にはリリースしたいところ。
七並べに関してもメジャーアップデートで2.0に更新しましたが、
早速、次のアップデートを予定しています。
Google Play の方で、いくつかコメント頂いてます。
ありがとうございます。
ご意見を参考にさせて頂きつつ、
なるべく設定などないシンプルな形を維持したいと考えています。
今月中(GW前)にはリリースしたいところ。
七並べに関してもメジャーアップデートで2.0に更新しましたが、
早速、次のアップデートを予定しています。
Google Play の方で、いくつかコメント頂いてます。
ありがとうございます。
ご意見を参考にさせて頂きつつ、
なるべく設定などないシンプルな形を維持したいと考えています。
2012年4月5日木曜日
参りました。。
エラーでハマってました。
しばらく開発してない&アップデートとかはしてた、で原因が掴みにくかったのもありますが、
基本的に、
・そもそも脆弱な構成
・これで良かったはずとの思い込み
でダメでしたね。。
具体的には書きにくいのですが、
とりあえず、外部参照には気をつけよう。
丸二日を無駄にしました(汗
追記)
これやっぱりR17になって仕様変更されたのが、そもそもの原因だったっぽい。。
日本Androidの会 ›
https://groups.google.com/forum/?fromgroups&hl=ja#!topic/android-group-japan/E4PfJt-lHEQ
引用:「ライブラリの置き場所が、"libs"に変更になった」
追記)
ちゃんと大元で確認が必要ですね。。
http://developer.android.com/sdk/eclipse-adt.html
http://tools.android.com/recent/dealingwithdependenciesinandroidprojects
英語は面倒とか言ってちゃダメね。。
2012年3月31日土曜日
Eclipse にADT17 を適用
※Eclipse英語版使ってます。
Android SDK Manager を見ると、ADT1.7 が出てきたのでアップデートしたら、いつもは出てこないメッセージ。何やら「help」⇒「Chack for Update」をやってくれとのこと。
たぶんADT上がるに合わせてEclipseのVersionも上げよ的なことかなと実施したら。。
最初のアップデートチェックからして長い、、そしてDDMSとかの面々が出てきてaccept してからも長い。。
しまいにはエラーでボツ。
まあ、よくある事と、いい加減重くなってたので、とりあえずEclipse終了。
再立ち上げしたら、SDK Manager 見れずにエラー。なにやらpropertyから設定してくれとか?
見ても分からんので、とりあえずEclipseのUpdateを再開。今後は早めに終わって、再起動要求。
今度は大丈夫そうだ~と再起動後に正常になりました。
その後、ネットで見たらハマったひと結構いるみたい。
ここ
http://cyberspacefarm.com/2012/0328/adt17-nullpointerexception/
見ると、順番も大事とか??
Android SDK Manager を見ると、ADT1.7 が出てきたのでアップデートしたら、いつもは出てこないメッセージ。何やら「help」⇒「Chack for Update」をやってくれとのこと。
たぶんADT上がるに合わせてEclipseのVersionも上げよ的なことかなと実施したら。。
最初のアップデートチェックからして長い、、そしてDDMSとかの面々が出てきてaccept してからも長い。。
しまいにはエラーでボツ。
まあ、よくある事と、いい加減重くなってたので、とりあえずEclipse終了。
再立ち上げしたら、SDK Manager 見れずにエラー。なにやらpropertyから設定してくれとか?
見ても分からんので、とりあえずEclipseのUpdateを再開。今後は早めに終わって、再起動要求。
今度は大丈夫そうだ~と再起動後に正常になりました。
その後、ネットで見たらハマったひと結構いるみたい。
ここ
http://cyberspacefarm.com/2012/0328/adt17-nullpointerexception/
見ると、順番も大事とか??
2012年3月30日金曜日
大感謝!
七並べのダウンロードが一万を超えました!
3/4に公開してから一ヶ月弱でここまで来るとは全く想定外でした。
遊んでいただいている皆様に、ただただ感謝です。
今後ともよろしくお願いいたします。
七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
3/4に公開してから一ヶ月弱でここまで来るとは全く想定外でした。
遊んでいただいている皆様に、ただただ感謝です。
今後ともよろしくお願いいたします。
七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
2012年3月23日金曜日
Android 試験に合格しました!
Androidアプリケーション技術者認定試験ベーシック(ACE) OA0-001
に合格しました。
アプリ開発の実績は3件。
その上で試験勉強の期間は2週間ほど。
参考書で一番良かったのは、
携帯OS教科書 Androidアプリケーション技術者ベーシック(緑本)
です。
模試からも結構出てました。
合格ラインが70%なので、基本的なことがシッカリ分かっていれば、まず合格できるはずです。
・追記)緑本の模試に関して。
こういった模試は、やらずにとっておいて試験の直前に力試しでやる人もいると思いますが、今回は非推奨です!
練習問題と思って勉強期間中盤にやって、間違えたところを中心に何度も繰り返しましょう。
出題頻度高です。
に合格しました。
アプリ開発の実績は3件。
その上で試験勉強の期間は2週間ほど。
参考書で一番良かったのは、
携帯OS教科書 Androidアプリケーション技術者ベーシック(緑本)
です。
模試からも結構出てました。
合格ラインが70%なので、基本的なことがシッカリ分かっていれば、まず合格できるはずです。
・追記)緑本の模試に関して。
こういった模試は、やらずにとっておいて試験の直前に力試しでやる人もいると思いますが、今回は非推奨です!
練習問題と思って勉強期間中盤にやって、間違えたところを中心に何度も繰り返しましょう。
出題頻度高です。
2012年3月19日月曜日
感謝!
七並べのダウンロードが1000を超えました!
予想外の好反応に驚いています。
遊んでいただいている皆様に感謝です。
今後ともよろしくお願いいたします。
七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
予想外の好反応に驚いています。
遊んでいただいている皆様に感謝です。
今後ともよろしくお願いいたします。
七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
2012年3月18日日曜日
MpMemo のバグを修正
Version3.2 から、テキストデータを取得できるようになりましたが、
インテント受信時に自動保存が無効になっている場合、保存が出来ないバグがありました。
現在のVersion3.4 では修正されています。
気づくのが遅れまして申し訳ありませんでした。
お手数ですが、更新をお願いいたします。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.mpmemo
インテント受信時に自動保存が無効になっている場合、保存が出来ないバグがありました。
現在のVersion3.4 では修正されています。
気づくのが遅れまして申し訳ありませんでした。
お手数ですが、更新をお願いいたします。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.mpmemo
2012年3月16日金曜日
2012年3月12日月曜日
アプリ更新
MpMemo
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.mpmemo
七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
それぞれアプリ更新しました。
MpMemo はテキストファイルの読み込みに対応。
ようやく実装できたのです。
(URIやFile といったクラスについてよく分かってなかった。。
七並べ は、スプラッシュ画面で戻るキー無効。
数値処理やダイアログ表示方式を修正など。
ところで、気になっているのですが、
更新が多いアプリって、ウザイですか??
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.mpmemo
七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens
それぞれアプリ更新しました。
MpMemo はテキストファイルの読み込みに対応。
ようやく実装できたのです。
(URIやFile といったクラスについてよく分かってなかった。。
七並べ は、スプラッシュ画面で戻るキー無効。
数値処理やダイアログ表示方式を修正など。
ところで、気になっているのですが、
更新が多いアプリって、ウザイですか??
最近の原道N50
あんまり気にしてなかったんだけど、
このブログで一番閲覧されている記事って、
原道N50を購入、のページなんだよね。
というわけで、最近のN50について報告。
ちょっと動作がモッサリしてきたが、概ね問題なく動いています。
アプリを起動したまま、ロック画面に入るとたまにフリーズしてRボタンをつつくハメになりますが。。
そんなこんなで久しぶりにアマゾンで見たら、1万円ポッキリで売っとる!
自分が買った時より、2000円以上も安いじゃないか。
このブログで一番閲覧されている記事って、
原道N50を購入、のページなんだよね。
というわけで、最近のN50について報告。
ちょっと動作がモッサリしてきたが、概ね問題なく動いています。
アプリを起動したまま、ロック画面に入るとたまにフリーズしてRボタンをつつくハメになりますが。。
そんなこんなで久しぶりにアマゾンで見たら、1万円ポッキリで売っとる!
自分が買った時より、2000円以上も安いじゃないか。
2012年3月11日日曜日
INTの最大値
JAVAでINTの最大値を超えるとどうなるか?
こちらを参照。
http://d.hatena.ne.jp/GARAPON/20090415/1239798925
つまりマイナスへ。
エラーには、ならない。
というかその前に適当なところにリミットつけるべきなんだろう。
こちらを参照。
http://d.hatena.ne.jp/GARAPON/20090415/1239798925
つまりマイナスへ。
エラーには、ならない。
というかその前に適当なところにリミットつけるべきなんだろう。
2012年3月7日水曜日
2012年3月5日月曜日
SQLite について
android でのSQLite 実装について書きます。
SQLite というのはデータベースであり、イメージとしては、こんな感じです。
① まず、メインとは別に、SQLiteのHelperクラスを作ります。
エクリプスで新しいクラスを選び、スーパークラスに SQLiteOpenHelper を指定して、クラス名は適当につけてクラス作成。
すると、onCreate と onUpgrade(必須のメソッド)が自動的に作成されます。
(自分の環境だと)クラス名のところにエラー出るのでポインタ合わせると、コンストラクタを作って的なメッセージ。そのままクリック。すると、自動的にコンストラクタが作成されます。
コンストラクタとonUpgradeメソッドは、そのままで大丈夫ですが、onCreate に処理を書く必要があります。
■ onCreate の処理
db.execSQL()メソッドの引数にSQL文を書きます。
以下の設定とすると、
・ テーブル名:hoge
・ カラム名A:fuga(テキスト情報)
・ カラム名B:piyo(数値情報)
文字列で、
"create table if not exists "+
"hoge"+
"(_id INTEGER primary key autoincrement,"+
"fuga"+" TEXT,"+
"piyo"+" INTEGER)"
と書きます。
最初は定型文。
三行目は、お約束。(これの実装が前提に作られているものが多いらしい)
これで、ヘルパークラスの作成は終わりです。
② 次にメイン側での処理。
上で作成したヘルパークラスのインスタンスを作成します。
その際の引数について。(これがヘルパークラスのコンストラクタに引き渡される)
・第1引数:Context
・第2引数:データベース名
・第3引数:CursorFactory(不明)
・第4引数:データベースのVersion
第1引数のContext には、getApplicationContext() を指定します。
第2引数は、データベース名です。任意の文字.db
第3引数は、よくわかりません。null でいいと思います。
第4引数は、Versionということですが、とりあえず1でいいです。
これに、getWritableDatabase() メソッドを使い、
SQLiteDatabase クラスの変数に代入して、準備完了です。
■ データベースに書き込むには?
execSQL()メソッドにSQL文を書く手もありますが、これを使わない方法もあります。
ContentValues クラスを使います。(データベース未経験なら、こちらのほうが分かりやすいかも)
ContentValues クラスの変数に、put メソッドを使い、カラム名とデータを指定します。
必要なデータをまとめておくわけです。
・ 追加したい場合は、
SQLiteDatabase クラスの変数に、insert() メソッドを使い、
第1引数:テーブル名
第2引数:(不明)null
第3引数:上で作成したContentValues クラスの変数を指定
・ 更新したい場合は、
update()メソッドを使います。
第1引数:テーブル名
第2引数:上で作成したContentValues クラスの変数を指定
第3引数:更新する条件にするカラム名
第4引数:第3引数に指定したカラム名にあるデータ
※ContentValues の変数は、使ったら clear() メソッドで掃除しましょう。
※応用
update() メソッドは、更新したレコード数を返します。
よって、0が返ってきたら、更新するものがなかったと判断。
最初に update() し、if文で0だったら insert() するという書き方ができます。
■ データベースからデータを任意の形で取得するには?
Cursol クラスのインスタンスを、SQLiteDatabase のquery メソッドで取得します。
query の引数は以下。
第1引数:テーブル名
第2引数:取得するカラム名
第3引数:検索条件
第4引数:検索条件の値
第5引数:group by 句
第6引数:Having 句
第7引数:order by 句
必須なのは第1引数のみです。(使わないところはnull
これで指定したテーブル名のデータが取れます。
条件、例えば、カラムBの値で、降順で取得したい場合は、
第7引数(order by)に、"カラムB DESC"と指定します。
ここで、最初の画象の「1行目 ⇒」となっているイメージ、つまりカーソルという概念でデータを一行ずつ取得します。
moveToFirst() で頭に移動。
Cursol の getColumnIndex() の引数にカラム名を指定してデータ取り。
moveToNext() で次の行へ移動。
Cursol は、使い終わったら、Close します。
おしまいに、onDestroy() で、
SQLiteDatabase と SQLiteOpenHelper のインスタンスにclose() メソッドをかけましょう。
追記)クローズについて
以下の記事
http://d.hatena.ne.jp/ukiki999/20100524/p1
では、明示的にクローズする必要ないとのこと。
追記2)
ためしにClose処理を外してみたところ、
android.database.sqlite.SQLiteException: database is locked
エラーが発生。
onCreate でオープンにしてるところで。
ただし頻度は非常に低いようです。
また本当にこれが原因だったのかどうか?
どうもSQLite はよく分からないことが多くて困ります。。
SQLite というのはデータベースであり、イメージとしては、こんな感じです。
① まず、メインとは別に、SQLiteのHelperクラスを作ります。
エクリプスで新しいクラスを選び、スーパークラスに SQLiteOpenHelper を指定して、クラス名は適当につけてクラス作成。
すると、onCreate と onUpgrade(必須のメソッド)が自動的に作成されます。
(自分の環境だと)クラス名のところにエラー出るのでポインタ合わせると、コンストラクタを作って的なメッセージ。そのままクリック。すると、自動的にコンストラクタが作成されます。
コンストラクタとonUpgradeメソッドは、そのままで大丈夫ですが、onCreate に処理を書く必要があります。
■ onCreate の処理
db.execSQL()メソッドの引数にSQL文を書きます。
以下の設定とすると、
・ テーブル名:hoge
・ カラム名A:fuga(テキスト情報)
・ カラム名B:piyo(数値情報)
文字列で、
"create table if not exists "+
"hoge"+
"(_id INTEGER primary key autoincrement,"+
"fuga"+" TEXT,"+
"piyo"+" INTEGER)"
と書きます。
最初は定型文。
三行目は、お約束。(これの実装が前提に作られているものが多いらしい)
これで、ヘルパークラスの作成は終わりです。
② 次にメイン側での処理。
上で作成したヘルパークラスのインスタンスを作成します。
その際の引数について。(これがヘルパークラスのコンストラクタに引き渡される)
・第1引数:Context
・第2引数:データベース名
・第3引数:CursorFactory(不明)
・第4引数:データベースのVersion
第1引数のContext には、getApplicationContext() を指定します。
第2引数は、データベース名です。任意の文字.db
第3引数は、よくわかりません。null でいいと思います。
第4引数は、Versionということですが、とりあえず1でいいです。
これに、getWritableDatabase() メソッドを使い、
SQLiteDatabase クラスの変数に代入して、準備完了です。
■ データベースに書き込むには?
execSQL()メソッドにSQL文を書く手もありますが、これを使わない方法もあります。
ContentValues クラスを使います。(データベース未経験なら、こちらのほうが分かりやすいかも)
ContentValues クラスの変数に、put メソッドを使い、カラム名とデータを指定します。
必要なデータをまとめておくわけです。
・ 追加したい場合は、
SQLiteDatabase クラスの変数に、insert() メソッドを使い、
第1引数:テーブル名
第2引数:(不明)null
第3引数:上で作成したContentValues クラスの変数を指定
・ 更新したい場合は、
update()メソッドを使います。
第1引数:テーブル名
第2引数:上で作成したContentValues クラスの変数を指定
第3引数:更新する条件にするカラム名
第4引数:第3引数に指定したカラム名にあるデータ
※ContentValues の変数は、使ったら clear() メソッドで掃除しましょう。
※応用
update() メソッドは、更新したレコード数を返します。
よって、0が返ってきたら、更新するものがなかったと判断。
最初に update() し、if文で0だったら insert() するという書き方ができます。
■ データベースからデータを任意の形で取得するには?
Cursol クラスのインスタンスを、SQLiteDatabase のquery メソッドで取得します。
query の引数は以下。
第1引数:テーブル名
第2引数:取得するカラム名
第3引数:検索条件
第4引数:検索条件の値
第5引数:group by 句
第6引数:Having 句
第7引数:order by 句
必須なのは第1引数のみです。(使わないところはnull
これで指定したテーブル名のデータが取れます。
条件、例えば、カラムBの値で、降順で取得したい場合は、
第7引数(order by)に、"カラムB DESC"と指定します。
ここで、最初の画象の「1行目 ⇒」となっているイメージ、つまりカーソルという概念でデータを一行ずつ取得します。
moveToFirst() で頭に移動。
Cursol の getColumnIndex() の引数にカラム名を指定してデータ取り。
moveToNext() で次の行へ移動。
Cursol は、使い終わったら、Close します。
おしまいに、onDestroy() で、
SQLiteDatabase と SQLiteOpenHelper のインスタンスにclose() メソッドをかけましょう。
追記)クローズについて
以下の記事
http://d.hatena.ne.jp/ukiki999/20100524/p1
では、明示的にクローズする必要ないとのこと。
追記2)
ためしにClose処理を外してみたところ、
android.database.sqlite.SQLiteException: database is locked
エラーが発生。
onCreate でオープンにしてるところで。
ただし頻度は非常に低いようです。
また本当にこれが原因だったのかどうか?
どうもSQLite はよく分からないことが多くて困ります。。
七並べを公開しました。
ようやく公開できました。
https://market.android.com/details?id=com.blogspot.yazakikenji.sevens
やっぱりゲームを作るのは大変です。
テストクラスの必要性を感じました。
https://market.android.com/details?id=com.blogspot.yazakikenji.sevens
やっぱりゲームを作るのは大変です。
テストクラスの必要性を感じました。
2012年3月4日日曜日
ダイアログの表示方法による違いについて
ダイアログ(Dialog)の作り方ですが、
show(); で直接表示する方法と、
create(); でインスタンスを作り、Activityにヒモづいて表示させる方法があります。
ただし、show(); を使うと以下のように
http://androidr.sblo.jp/article/44022356.html
バックグラウンドでエラーが発生します。
なのでcreate(); を使いたくなるのですが、
ダイアログ表示の度に、表示内容を変更したい場合は注意が必要!
一回目の表示の時に、インスタンスが作成されるので二回目以降に処理がされません。
※参考
http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=52
回避するには、removeDialog()でインスタンスを削除します。
final static int DIALOG1=0;
showDialog(DIALOG1);
Dialog onCreateDialog(int id)~
return new AlertDialog.Builder ~ .create();
removeDialog(DIALOG1);
追記)
上記メソッドは現時点で非推奨になっています。
http://developer.android.com/reference/android/app/Activity.html#showDialog(int)
show(); で直接表示する方法と、
create(); でインスタンスを作り、Activityにヒモづいて表示させる方法があります。
ただし、show(); を使うと以下のように
http://androidr.sblo.jp/article/44022356.html
バックグラウンドでエラーが発生します。
なのでcreate(); を使いたくなるのですが、
ダイアログ表示の度に、表示内容を変更したい場合は注意が必要!
一回目の表示の時に、インスタンスが作成されるので二回目以降に処理がされません。
※参考
http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=52
回避するには、removeDialog()でインスタンスを削除します。
final static int DIALOG1=0;
showDialog(DIALOG1);
Dialog onCreateDialog(int id)~
return new AlertDialog.Builder ~ .create();
removeDialog(DIALOG1);
追記)
上記メソッドは現時点で非推奨になっています。
http://developer.android.com/reference/android/app/Activity.html#showDialog(int)
プリファレンスの削除について
プリファレンス(SharedPreferences)の削除で、地味にハマったのを思い出したので投稿メモ。
プリファレンスを削除する場合、
clear()メソッドを使う、となっています。
でも、clear()だけしても削除されません。
commit()する必要があります。(ここでハマった。。
この辺、検索してもちゃんと説明しているサイトを見つけられなかった。
分かってる人にとっては、
そりゃcommit()しないと確定しないでしょ、、という話なんだろうけど^^;
というか、そもそも削除が必要なケースがあまりないのかもしれない。
削除というか、クリアすると考えれば、
初期値を代入する、という方法が普通なんでしょう。
※サンプルコード
SharedPreferences pref;
Editor editor;
pref=getPreferences(MODE_PRIVATE);
editor=pref.edit();
editor.clear().commit();
プリファレンスを削除する場合、
clear()メソッドを使う、となっています。
でも、clear()だけしても削除されません。
commit()する必要があります。(ここでハマった。。
この辺、検索してもちゃんと説明しているサイトを見つけられなかった。
分かってる人にとっては、
そりゃcommit()しないと確定しないでしょ、、という話なんだろうけど^^;
というか、そもそも削除が必要なケースがあまりないのかもしれない。
削除というか、クリアすると考えれば、
初期値を代入する、という方法が普通なんでしょう。
※サンプルコード
SharedPreferences pref;
Editor editor;
pref=getPreferences(MODE_PRIVATE);
editor=pref.edit();
editor.clear().commit();
2012年3月3日土曜日
七並べの完成へむけて
メモアプリの前に作っていた七並べを近日中に完成させたいと思っています。
今の作業が終われば、あとは自己満足の世界なので。。
終わったらアプリ制作は一段落として、アンドロイド試験の勉強に力点を移そうかと考えています。
・今後の投稿予定
SQLite(七並べでプレイヤーの点数管理に利用)
試験のこと。(合格できたら)
今の作業が終われば、あとは自己満足の世界なので。。
終わったらアプリ制作は一段落として、アンドロイド試験の勉強に力点を移そうかと考えています。
・今後の投稿予定
SQLite(七並べでプレイヤーの点数管理に利用)
試験のこと。(合格できたら)
2012年2月29日水曜日
メモ帳アプリ Version 3.0
バーション3に更新しました。
https://market.android.com/details?id=com.blogspot.yazakikenji.mpmemo
画面の大きさとIMEによっては、編集画面が押しつぶされてしまっていたので、矢印ボタンを廃止し、既存のボタンのみで小さくしました。
たぶんこれで打ち止めかな。あとは要望あればなるべく対応します。
https://market.android.com/details?id=com.blogspot.yazakikenji.mpmemo
画面の大きさとIMEによっては、編集画面が押しつぶされてしまっていたので、矢印ボタンを廃止し、既存のボタンのみで小さくしました。
たぶんこれで打ち止めかな。あとは要望あればなるべく対応します。
2012年2月25日土曜日
メモ帳アプリ Version 2.0
バーション2に更新しました。
https://market.android.com/details?id=com.blogspot.yazakikenji.mpmemo
変更点は、矢印ボタンと削除ボタンを画面上に表示。
矢印ボタンは、一部の語句を選択したい時のカーソル微調整で使えるかな。
いろいろ考えたんですが、シンプルな形に落ち着きました。
https://market.android.com/details?id=com.blogspot.yazakikenji.mpmemo
変更点は、矢印ボタンと削除ボタンを画面上に表示。
矢印ボタンは、一部の語句を選択したい時のカーソル微調整で使えるかな。
いろいろ考えたんですが、シンプルな形に落ち着きました。
2012年2月23日木曜日
Activityのライフサイクルをトーストで実感
Activityのライフサイクルを理解するのは重要ですが、なかなか文章だと実感できないので自分のアプリで試してみました。
通常はログに出るようにするんでしょうが、スマホの画面とPC画面を行ったり来たりより、スマホ画面にトーストで表示させた方が、実感しやすかったです。
これ以来、なんでもトーストで出してしまう^^;
int num=hoge;
String str=valueOf(num);
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
(追記)フラグメント内でのトースト表示
Toast.makeText(getActivity(), "テスト", Toast.LENGTH_LONG).show();
通常はログに出るようにするんでしょうが、スマホの画面とPC画面を行ったり来たりより、スマホ画面にトーストで表示させた方が、実感しやすかったです。
これ以来、なんでもトーストで出してしまう^^;
int num=hoge;
String str=valueOf(num);
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
(追記)フラグメント内でのトースト表示
Toast.makeText(getActivity(), "テスト", Toast.LENGTH_LONG).show();
2012年2月19日日曜日
メモ帳アプリを公開!
メモ帳アプリを公開しました。
MpMemo という名前です。
https://market.android.com/details?id=com.blogspot.yazakikenji.mpmemo
これは個人的に欲しかったので作ったものです。
自分の使ってる端末が、タブレット型でSIM入りません。
ネット接続はWifi のみ。
契約もしてないので、ネット繋がる場所が限定されています。
なので、オフライン環境でちょっと保存しときたいのがあった時に、それをまとめておいて、最終的にはオンライン環境になった時に、メール送信とかしてPCに送って、あとはPCで見れればいいという感じです。
まさに自分自身が、毎日使っているという。
※追記
メモといえば、エバーノート(Evernote)!
アカウントとるのを横着して、使ってなかったんですが、、作りました。
思った以上に便利で、有名なの納得!
ぶっちゃけメインのメモはEvernoteで決まりですね。
じゃあ、MpMemoの価値は??
①twitter とかで複数のつぶやきをまとめてノートに入れたい場合。(そのままEvernoteだと別々のメモになってしまう。ある種のクリップボード的な使い方。)
②メール送信したい場合
③ログイン~クラウド~なアプリが何らかの理由でダメな場合
④Evernoteに上げるまでもない(上げたくない)場合
こんなとこでしょうか?
(ちなみにメール登録数は2つだけなんですが、増やしてほしい人いたらコメント下さい。10個くらいまでなら問題なく増やせるかと。)
あと、、やっぱりメモ帳なんてメーケットに大量にありますから、、見つけてもらうのも大変。
・マーケットへの反映について
マーケットに公開してから表示されるまでの時間について。
だいたい一時間くらいかかったと思います。
チェックするようになってきたんでしょうか?
追記)
2012/02/03 付けでこんな記事が出てました。
『マルウエアスキャン機能「Bouncer」をAndroid Marketに導入』
http://itpro.nikkeibp.co.jp/article/NEWS/20120203/380062/
時間かかるのがこれ原因とは断定できませんが、チェックはするようになったみたいですね。
MpMemo という名前です。
https://market.android.com/details?id=com.blogspot.yazakikenji.mpmemo
これは個人的に欲しかったので作ったものです。
自分の使ってる端末が、タブレット型でSIM入りません。
ネット接続はWifi のみ。
契約もしてないので、ネット繋がる場所が限定されています。
なので、オフライン環境でちょっと保存しときたいのがあった時に、それをまとめておいて、最終的にはオンライン環境になった時に、メール送信とかしてPCに送って、あとはPCで見れればいいという感じです。
まさに自分自身が、毎日使っているという。
※追記
メモといえば、エバーノート(Evernote)!
アカウントとるのを横着して、使ってなかったんですが、、作りました。
思った以上に便利で、有名なの納得!
ぶっちゃけメインのメモはEvernoteで決まりですね。
じゃあ、MpMemoの価値は??
①twitter とかで複数のつぶやきをまとめてノートに入れたい場合。(そのままEvernoteだと別々のメモになってしまう。ある種のクリップボード的な使い方。)
②メール送信したい場合
③ログイン~クラウド~なアプリが何らかの理由でダメな場合
④Evernoteに上げるまでもない(上げたくない)場合
こんなとこでしょうか?
(ちなみにメール登録数は2つだけなんですが、増やしてほしい人いたらコメント下さい。10個くらいまでなら問題なく増やせるかと。)
あと、、やっぱりメモ帳なんてメーケットに大量にありますから、、見つけてもらうのも大変。
・マーケットへの反映について
マーケットに公開してから表示されるまでの時間について。
だいたい一時間くらいかかったと思います。
チェックするようになってきたんでしょうか?
追記)
2012/02/03 付けでこんな記事が出てました。
『マルウエアスキャン機能「Bouncer」をAndroid Marketに導入』
http://itpro.nikkeibp.co.jp/article/NEWS/20120203/380062/
時間かかるのがこれ原因とは断定できませんが、チェックはするようになったみたいですね。
2012年2月18日土曜日
ボタン クリックイベントをXMLに定義する方法
①XML で、Button ウィジェットなどのOn click 欄にメソッド名を書く。(※ここでは、hoge とする)
②public でView を引数にしてメソッド定義。(※ボタン2つ、XMLで定義しているId:<button1><button2>として、それぞれのId で分岐可能)
public void hoge(View view) {
if(findViewById(R.id.button1)==view){
((Button) view).setText("押したよ~1");
}else if(findViewById(R.id.button2)==view){
((TextView) view).setText("押したよ~2");
}
}
試してみたら、キャストするのButton でもTextView でも、ボタンの文字が押したよ~に変わってくれた。この辺はよく分からん。
ボタンごとに定義するメソッド名を変えて、Javaでそれぞれ書いた方が分かりやすいかも?
追記)
上記の書き方だと、どうもバグ?みたいな現象がありました。
また、ボタン1つに1つのメソッドをそれぞれ定義した方が分かりやすいと思いました。
②public でView を引数にしてメソッド定義。(※ボタン2つ、XMLで定義しているId:<button1><button2>として、それぞれのId で分岐可能)
public void hoge(View view) {
if(findViewById(R.id.button1)==view){
((Button) view).setText("押したよ~1");
}else if(findViewById(R.id.button2)==view){
((TextView) view).setText("押したよ~2");
}
}
試してみたら、キャストするのButton でもTextView でも、ボタンの文字が押したよ~に変わってくれた。この辺はよく分からん。
ボタンごとに定義するメソッド名を変えて、Javaでそれぞれ書いた方が分かりやすいかも?
追記)
上記の書き方だと、どうもバグ?みたいな現象がありました。
また、ボタン1つに1つのメソッドをそれぞれ定義した方が分かりやすいと思いました。
2012年2月17日金曜日
Android の設定画面はPreferenceActivity !
アンドロイドでよくある設定画面。
どうやって作るのか?
最初、レイアウトで独自に作ったり、
リストビュー(ListView) を使うのかと思ったりして遠回りしましたが、
正解は、PreferenceActivity を使うことです。
XML (レイアウトのとは別) へ定義するだけで、自動的に設定画面風に表示され、かつ、自動的にプリファレンスに保存までしてくれます!
個人的に、超感動!
やり方は、ググれば出てきますが、読んでるだけじゃイマイチ分からないかも?
実際にやってみて、理解できました。
ここでも後日、解説を書こうと思います。
書きました↓
追記)やり方
①プリジェクト右クリック→New→Android XML File →Resource Type でPreference を選び、ファイル名はご自由に。
②(勝手に出てくる場合もありますが)Preference.XMLのファイルを右クリック→Open With →Android Xml Resources Editor を選択するとGUIの画面になります。
③Add... ボタンをクリックして設定したい要素を選択します。
※TOPに置くのか、配下に置くのか、ラジオボタンの選択が出る場合もありますが、あまり気にしなてくていいと思います。
あとはドンドン追加して設定していくだけ。
☆ 設定出来る要素の種類
・CheckBoxPreference
チェックボックスが設定できます。
最低限、必要だろう指定は、
・Key :プリフェランスに保存してくれる時に設定するKey (呼び出す時、分かるように。)
・Title :(チェックボックスに)表示する文字列
の2つだけかな。
Summary on/off でチェックボックスにチェック入った時とそうでない時のメッセージを指定できる。(コードに書かなくていいので簡単!)
最初からチェック入れておきたい時は、Default value にtrue と直接記述する。
・EditTextPreference
文字編集、保存できます。
最低限必要な指定は、上のCheckBoxPreference と同じ。
・ListPreference
ラジオボタン付きのリストが表示される。(選択できるのは1つだけ)
最低限必要な実装は、
・Entries :画面上のリストに表示する文字列
・Entry values :そのリストの各要素が、実際に保持している値
これらは、values でstring型のarrayリストとして設定します。
(ちなみにint型のarrayリストをEntry values の方に設定したら見事エラー^^; String型しか対応してない?)
あとは同上。
デフォルトで選択させておきたい場合は、やはりDefault value にvalues に設定した値を書きます。
・Preference
特に機能のない項目が作れます。
もちろん機能ないといっても、Java側で、この項目をクリックしたら~するとか、そういうのは好きなように実装できます。
・PreferenceCategory
設定画面の中の、サブタイトル的な表示になります。
Title に文字列指定するくらい?
・PreferenceScreen
この設定画面の大元。タイトルバーにバッチリ表示されます。
これも基本的には、Title に文字列指定するくらいかなと思いますが、
使い方のポイントしては、これ入れ子に出来るんですね。
入れ子にすると、次の画面が簡単に作れます!
・RingtonePreference
使ったことないんで、ノーコメント^^;
どうやって作るのか?
最初、レイアウトで独自に作ったり、
リストビュー(ListView) を使うのかと思ったりして遠回りしましたが、
正解は、PreferenceActivity を使うことです。
XML (レイアウトのとは別) へ定義するだけで、自動的に設定画面風に表示され、かつ、自動的にプリファレンスに保存までしてくれます!
個人的に、超感動!
やり方は、ググれば出てきますが、読んでるだけじゃイマイチ分からないかも?
実際にやってみて、理解できました。
ここでも後日、解説を書こうと思います。
書きました↓
追記)やり方
①プリジェクト右クリック→New→Android XML File →Resource Type でPreference を選び、ファイル名はご自由に。
②(勝手に出てくる場合もありますが)Preference.XMLのファイルを右クリック→Open With →Android Xml Resources Editor を選択するとGUIの画面になります。
③Add... ボタンをクリックして設定したい要素を選択します。
※TOPに置くのか、配下に置くのか、ラジオボタンの選択が出る場合もありますが、あまり気にしなてくていいと思います。
あとはドンドン追加して設定していくだけ。
☆ 設定出来る要素の種類
・CheckBoxPreference
チェックボックスが設定できます。
最低限、必要だろう指定は、
・Key :プリフェランスに保存してくれる時に設定するKey (呼び出す時、分かるように。)
・Title :(チェックボックスに)表示する文字列
の2つだけかな。
Summary on/off でチェックボックスにチェック入った時とそうでない時のメッセージを指定できる。(コードに書かなくていいので簡単!)
最初からチェック入れておきたい時は、Default value にtrue と直接記述する。
・EditTextPreference
文字編集、保存できます。
最低限必要な指定は、上のCheckBoxPreference と同じ。
・ListPreference
ラジオボタン付きのリストが表示される。(選択できるのは1つだけ)
最低限必要な実装は、
・Entries :画面上のリストに表示する文字列
・Entry values :そのリストの各要素が、実際に保持している値
これらは、values でstring型のarrayリストとして設定します。
(ちなみにint型のarrayリストをEntry values の方に設定したら見事エラー^^; String型しか対応してない?)
あとは同上。
デフォルトで選択させておきたい場合は、やはりDefault value にvalues に設定した値を書きます。
・Preference
特に機能のない項目が作れます。
もちろん機能ないといっても、Java側で、この項目をクリックしたら~するとか、そういうのは好きなように実装できます。
・PreferenceCategory
設定画面の中の、サブタイトル的な表示になります。
Title に文字列指定するくらい?
・PreferenceScreen
この設定画面の大元。タイトルバーにバッチリ表示されます。
これも基本的には、Title に文字列指定するくらいかなと思いますが、
使い方のポイントしては、これ入れ子に出来るんですね。
入れ子にすると、次の画面が簡単に作れます!
・RingtonePreference
使ったことないんで、ノーコメント^^;
メモ帳アプリ、作成中。
メモ帳アプリを作成中です。
メジャーなメモ帳アプリとは、ちょっと違った視点からの使い勝手を考えて作ってます。
まあ、自分が欲しい機能をまとめただけなんですが。。(笑)
もちろんマーケットに上げます。
七並べより早くなりそう。。
しかしあれですね、コード書いてると、あっという間に一週間経ちますね。
メジャーなメモ帳アプリとは、ちょっと違った視点からの使い勝手を考えて作ってます。
まあ、自分が欲しい機能をまとめただけなんですが。。(笑)
もちろんマーケットに上げます。
七並べより早くなりそう。。
しかしあれですね、コード書いてると、あっという間に一週間経ちますね。
2012年2月10日金曜日
結果とプロセス
結果と、それに至るまでのプロセスがあるわけですが、
プロセスの段階でいくら努力しました!といっても結果が伴わないと社会では評価されないんですよね。
学生時代は、プロセスの努力を評価してもらえたりしますが、、社会人はそうもいかないのが現実。
できるかできないか、じゃない、やるかやらないかだ!みたいな体育会系のノリは苦手ですが、
ある分野で、それなりにやろうと思ったら、、そりゃやるしかない、ですよ。
理屈という名の言い訳を話している暇があったら、ちゃんとしたプログラムを作るために必死で考えるべき。
※追記
ただし、定期的にリラックスは必要です。
コードが浮かぶ場所3つ
・トイレ
・風呂
・ベッドのなか
プロセスの段階でいくら努力しました!といっても結果が伴わないと社会では評価されないんですよね。
学生時代は、プロセスの努力を評価してもらえたりしますが、、社会人はそうもいかないのが現実。
できるかできないか、じゃない、やるかやらないかだ!みたいな体育会系のノリは苦手ですが、
ある分野で、それなりにやろうと思ったら、、そりゃやるしかない、ですよ。
理屈という名の言い訳を話している暇があったら、ちゃんとしたプログラムを作るために必死で考えるべき。
※追記
ただし、定期的にリラックスは必要です。
コードが浮かぶ場所3つ
・トイレ
・風呂
・ベッドのなか
2012年2月9日木曜日
Android で日時(日付・時刻)を取得する方法
いくつか使えるクラスがありますが、せっかくAndroid なので、Time クラスを使ってみます。
android.text.format.Time
・java (※メソッドの形で)
String time() {
Time time=new Time();
time.setToNow();
String date=getString(R.string.time,time.year,time.month+1,time.monthDay,time.hour,time.minute,time.second);
return date;
}
・string.xml
<string name="time">%1$d年%2$d月%3$d日 %4$d時%5$d分%6$d秒</string>
※string.xml を利用しているのは、コードになるべく日本語を入れたくないから。+多言語対応への布石。あと全部%dなのはサボりです(笑)
android.text.format.Time
・java (※メソッドの形で)
String time() {
Time time=new Time();
time.setToNow();
String date=getString(R.string.time,time.year,time.month+1,time.monthDay,time.hour,time.minute,time.second);
return date;
}
・string.xml
<string name="time">%1$d年%2$d月%3$d日 %4$d時%5$d分%6$d秒</string>
※string.xml を利用しているのは、コードになるべく日本語を入れたくないから。+多言語対応への布石。あと全部%dなのはサボりです(笑)
2012年2月8日水曜日
初めてAndroid マーケットにあげてみました。
Lights Out (ライツアウト) です。
https://market.android.com/details?id=com.blogspot.yazakikenji.panel
古典的な?パズルゲームでしょうか。
※Wiki の説明
ライツアウトというゲーム名は、すっかり忘れていたのですが、ゲームのルールというか内容は覚えていて、テスト的に作成したものです。
やってみると、あー懐かしい~ となるかも?
・マーケットへの反映について
公開完了しても、URLを示してくれません。。
仕方ないので自分で検索するのですが、ヒットしない。
調べるとアップしてすぐに反映すると書いてあるのですが。。
反映されてないのか??
最終的に、自分がアップした一覧ページ
https://market.android.com/developer?pub=CloverQ
のURL作成ルールが分かって、アクセスして確認できました!
※最後のCloverQというのが、自分の開発者名です。
これを変更すれば、各自のを確認できます。
やれやれ。。
https://market.android.com/details?id=com.blogspot.yazakikenji.panel
古典的な?パズルゲームでしょうか。
※Wiki の説明
ライツアウトというゲーム名は、すっかり忘れていたのですが、ゲームのルールというか内容は覚えていて、テスト的に作成したものです。
やってみると、あー懐かしい~ となるかも?
・マーケットへの反映について
公開完了しても、URLを示してくれません。。
仕方ないので自分で検索するのですが、ヒットしない。
調べるとアップしてすぐに反映すると書いてあるのですが。。
反映されてないのか??
最終的に、自分がアップした一覧ページ
https://market.android.com/developer?pub=CloverQ
のURL作成ルールが分かって、アクセスして確認できました!
※最後のCloverQというのが、自分の開発者名です。
これを変更すれば、各自のを確認できます。
やれやれ。。
2012年2月7日火曜日
N50 画面ブラックアウト!
先ほど発生。
ロック画面でフリーズして、スーっとブラックアウト。
電源ボタン押下、長押し、いろいろするも反応なし。
adb devices で見ると認識してる。
reboot してもダメ。
本体側面のRボタンをつついたら起動!
データ無事。今のところ、問題なし。
ちょっと冷や汗でした。。
追記)
どうも特定のアプリを起動したまま、スリープ→ロック画面になった場合、現象発生するっぽい。
それで現象再発しました。
その後、それを避けたら現象再現せず。
追記2)
上で書いた特定のアプリ起動中に操作不能に。
Rボタンも効かず。
充電中だったので外して再度Rボタン。再起動せず。電源ボタン押下で起動。
アイコンがいくつかドロイド君画象になっていたが、ちょっと待ったら復活。
さすがにアプリ削除したわ。。
ロック画面でフリーズして、スーっとブラックアウト。
電源ボタン押下、長押し、いろいろするも反応なし。
adb devices で見ると認識してる。
reboot してもダメ。
本体側面のRボタンをつついたら起動!
データ無事。今のところ、問題なし。
ちょっと冷や汗でした。。
追記)
どうも特定のアプリを起動したまま、スリープ→ロック画面になった場合、現象発生するっぽい。
それで現象再発しました。
その後、それを避けたら現象再現せず。
追記2)
上で書いた特定のアプリ起動中に操作不能に。
Rボタンも効かず。
充電中だったので外して再度Rボタン。再起動せず。電源ボタン押下で起動。
アイコンがいくつかドロイド君画象になっていたが、ちょっと待ったら復活。
さすがにアプリ削除したわ。。
2012年2月3日金曜日
日本Androidの会
日本Androidの会に入ってみました。
といっても、メーリングリストに参加するだけのものです。
驚いたのは、日々20件程度のメールが飛び交って活発なこと。
また、”教えて君”が多いこと!
まあ勉強になることもあるので良いのですが。。
ここ一週間ほど、いろいろやっているうちに時間が過ぎてしまい、全然コード書いてません(汗
毎日やってたせいか、妙に不安になってしまう。。今日はこれまで。
といっても、メーリングリストに参加するだけのものです。
驚いたのは、日々20件程度のメールが飛び交って活発なこと。
また、”教えて君”が多いこと!
まあ勉強になることもあるので良いのですが。。
ここ一週間ほど、いろいろやっているうちに時間が過ぎてしまい、全然コード書いてません(汗
毎日やってたせいか、妙に不安になってしまう。。今日はこれまで。
2012年1月20日金曜日
原道N50を使用して一ヶ月経過。
表題のとおり。
一ヶ月経過しましたが、特に問題は起きてません。
ほぼ毎日外に持ち歩いています。
落としたりして、衝撃が加わったことはナシ!
充電は付属のACからのみ。
Wifi 接続問題なし。
中華パッドということで、不安がある人もいると思います。
実際ネットで検索するといろいろ出てきますし。
まあ、自分の場合は(今のところ)問題ありません、ということで。
この辺、気になる人もいると思うので書いてみました。
今後、何か問題発生したら報告します。
一ヶ月経過しましたが、特に問題は起きてません。
ほぼ毎日外に持ち歩いています。
落としたりして、衝撃が加わったことはナシ!
充電は付属のACからのみ。
Wifi 接続問題なし。
中華パッドということで、不安がある人もいると思います。
実際ネットで検索するといろいろ出てきますし。
まあ、自分の場合は(今のところ)問題ありません、ということで。
この辺、気になる人もいると思うので書いてみました。
今後、何か問題発生したら報告します。
2012年1月19日木曜日
素材:トランプ画象を自作しました。
現在作成中の七並べで使うトランプ画象を自作しました。
フリー素材で探したのですが、アンドロイドの小さい画面では見えにくいものが多くて。。
せっかくなので公開したいと思います。
こんな感じのトランプ画象です♪
以下からダウンロードできます。
http://dl.dropbox.com/u/1742965/PlayingCards.zip
https://onedrive.live.com/redir?resid=B94C6A8B8D4E219A!6669&authkey=!AMXOUIyaQXF0Rr0&ithint=file%2czip
※利用規約:
個人でも商用でも自由にお使い下さい。
連絡不要ですが、出典を明記して頂けると嬉しいです。(この記事のURLなど)
加工や二次配布する場合は、出典を明記して下さい。
フリー素材で探したのですが、アンドロイドの小さい画面では見えにくいものが多くて。。
せっかくなので公開したいと思います。
こんな感じのトランプ画象です♪
以下からダウンロードできます。
https://onedrive.live.com/redir?resid=B94C6A8B8D4E219A!6669&authkey=!AMXOUIyaQXF0Rr0&ithint=file%2czip
※利用規約:
個人でも商用でも自由にお使い下さい。
連絡不要ですが、出典を明記して頂けると嬉しいです。(この記事のURLなど)
加工や二次配布する場合は、出典を明記して下さい。
2012年1月16日月曜日
CountDownTimer について
一時的に処理を停止させたい時、Java ならSleep を使えばいいが、Android でそれをやると全体の処理が止まってしまい、フリーズしたようになってしまう。
また、「処理⇒Sleep(1000)⇒処理⇒Sleep(1000)⇒処理⇒Sleep(1000)」としても、合計Sleep(3000)待ってから、まとめて処理が実行された。
画像処理が入っているのがダメなのか。。
なんとか方法を探したところ、Android では、CountDownTimer を使う以外にない(※)とのことだった。
※スレッドを使う場合は別。
いまさらスレッドは勘弁なので、CountDownTimer を使ってみるが、これ仕組みをよく理解してないとトラブルの元になりそうだと感じた。
まず、CountDownTimer クラスはObject クラスを継承しているだけなのだが、まるでThread クラスのように別の処理として実行されるようだ。
つまり、CountDownTimer の処理を記載した後に書かれた処理が、CountDownTimer に記載した処理とは別に実行されていく。
CountDownTimer は、あくまで独立したカウントダウンタイマーとして機能するだけであって、別にその間Sleep してくれるわけではないということ。
きちんと処理の流れを考えておかないと、おかしな挙動になりそうだ。
現在いろいろと試しているので、また新たな情報あれば追記します。
※追記)
VIEWを作った処理がUIスレッドとなり、ここでスリープすると全体の処理が止まってしまう。
また、「処理⇒Sleep(1000)⇒処理⇒Sleep(1000)⇒処理⇒Sleep(1000)」としても、合計Sleep(3000)待ってから、まとめて処理が実行された。
画像処理が入っているのがダメなのか。。
なんとか方法を探したところ、Android では、CountDownTimer を使う以外にない(※)とのことだった。
※スレッドを使う場合は別。
いまさらスレッドは勘弁なので、CountDownTimer を使ってみるが、これ仕組みをよく理解してないとトラブルの元になりそうだと感じた。
まず、CountDownTimer クラスはObject クラスを継承しているだけなのだが、まるでThread クラスのように別の処理として実行されるようだ。
つまり、CountDownTimer の処理を記載した後に書かれた処理が、CountDownTimer に記載した処理とは別に実行されていく。
CountDownTimer は、あくまで独立したカウントダウンタイマーとして機能するだけであって、別にその間Sleep してくれるわけではないということ。
きちんと処理の流れを考えておかないと、おかしな挙動になりそうだ。
現在いろいろと試しているので、また新たな情報あれば追記します。
※追記)
VIEWを作った処理がUIスレッドとなり、ここでスリープすると全体の処理が止まってしまう。
2012年1月15日日曜日
カウントアップの変数
カウントアップの変数は、使い方が重要だなと思いました。
・カウントアップするタイミング
・そのカウントアップ変数をif文につかうタイミング
・処理を書く場所
意識しないと、処理のタイミングがズレてしまう。
・カウントアップするタイミング
・そのカウントアップ変数をif文につかうタイミング
・処理を書く場所
意識しないと、処理のタイミングがズレてしまう。
2012年1月14日土曜日
新年あけまして、
アンドロイドアプリ作成中です。
2つあります。
1つ目は、パネルゲームで、こちらは3日ほどでゲームの処理部分は完成。
家族に遊ばせたら意外と好評だったので、判定処理をつけて、よりゲームらしくする予定。
2つ目は、七並べで、年末までにレイアウト作成。年明けからゲーム処理を作り始め、バグ取りして昨日できた。
あとはタイミング処理などゲームのテンポをつけたり、リソースやレイアウトを見やすいようにして完成度を高める予定。
2つとも完成したらAndroidマーケットに登録する予定。
2つあります。
1つ目は、パネルゲームで、こちらは3日ほどでゲームの処理部分は完成。
家族に遊ばせたら意外と好評だったので、判定処理をつけて、よりゲームらしくする予定。
2つ目は、七並べで、年末までにレイアウト作成。年明けからゲーム処理を作り始め、バグ取りして昨日できた。
あとはタイミング処理などゲームのテンポをつけたり、リソースやレイアウトを見やすいようにして完成度を高める予定。
2つとも完成したらAndroidマーケットに登録する予定。
登録:
投稿 (Atom)