2012年7月28日土曜日

[Android] WebView の FATAL EXCEPTION を解決する

Ho to fix FATAL EXCEPTION on WebView

ActivityにWebViewをオーバーレイ配置したAndroidアプリを開発していたのですが、WebView内のコンテンツをタップしたらエラーによりアプリが強制終了してしまうバグがでてしまいました。
エラーが起きたときのLogCatはこのような内容です。
Webコンテンツをクリックしたとき、ブラウザーを起動する処理に失敗するようです。
エラーが起きるアプリと起きないアプリがあり、原因は特定できませんでした。
改善前のソースです。
※エラーが起きるものと仮定したソースです。このソースを実行しても必ずエラーになるわけではありません。
Activity (Main.java)
マニフェスト(AndroidManifest.xml)
LogCatのスクリーンショット

WebViewをタップしても強制終了しないように改善したソースです。
Activity (Main.java) ※マニフェストの変更はありません。

改善した点は、ブラウザーが起動する処理をOSに任せず、WebViewClientのインスタンスを生成しIntentでブラウザーを起動させるところです。
これでエラーが起きなくなりました。

ちなみに「Is this really what you want?」というエラーメッセージは ContextImpl.java のソースにハードコーディングされてました。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/app/ContextImpl.java
intent.getFlags()を条件によって例外が起きるようです。

以上、参考になれば幸いです。

2012年7月21日土曜日

[Android] WebViewを使うときの注意点

What to be careful about the WebView widget.

先日、ActivityにWebViewを配置したアプリケーションを作っていたら妙な挙動に気付きました。
ActivityにボタンとYahoo! JapanのWebページを表示するだけの動作を期待して作ったアプリのソースです。

Activity(Main.java)
レイアウト(activity_main.xml)
マニフェスト(AndroidManifest.xml)
しかし、起動してみるとWebページはActivityに表示されず、ブラウザーが起動してしまいます。
※Yahoo!を表示させるアプリを作っていたわけではないのですが、動作テスト中に偶然発見しました。

原因は、http://yahoo.co.jp をAndroid端末で開くと http://m.yahoo.co.jp/ にリダイレクトされるためでした。
URLのリダイレクトはYahoo!の仕様です。
そして、リダイレクト先のWebページ開くためにブラウザーを起動するのはAndroidの仕様です。
あらかじめリダイレクト先のURLを表示するようにソースを修正したら期待通りになりました。

修正後のActivity(Main.java)

WebViewウィジットで使用するWebコンテンツを作るときはページの遷移方法は注意深く設定しなければいけないようです。
※Googleで検索したらWebViewのサブクラスを作ってブラウザーを起動させない方法を紹介している方もいらっしゃいました。

関連ブログ
[Android] Webコンテンツを強制的に表示するには

以上、参考になれば幸いです。

2012年7月14日土曜日

[Android] アプリの履歴を調べるアプリの作り方

How to get the histories of applications

Androidには過去に起動したタスクを調べるための RecentTaskInfo というクラスがあります。
http://developer.android.com/intl/ja/reference/android/app/ActivityManager.RecentTaskInfo.html

このクラスを使ったサンプルを作ってみました。
android.permission.GET_TASKS というパーミッションが必要です。

マニフェスト(AndroidManifest.xml)
Activity(Main.java)
これをIS01で実行してみました。
知らないアプリが勝手に起動していることが分かります。
ActivityManagerクラスには他にも RunningTaskInfo や RunningAppProcessInfo などおもしろそうなクラスがあります。

以上、参考になれば幸いです。

2012年7月7日土曜日

[Android] 逆向き画面(Reverse screen)を検知する

TODOHow to know tha the screen orientation is reverse or not.
Android2.2から画面の逆向き表示が可能になりました。
Activityが逆向きかどうかを知るにはこの様なコードで知ることができます。

ただしgetRotationメソッドはAndroid2.2から追加されたメソッドです。
Android2.1以前の端末では上のコードはエラーになります。

そこで、Javaのリフレクションを使ってAndroidのバージョンを限定せずに逆向きを検知するサンプルを作ってみました。

Activity (Main.java)
※パーミッション不要のためマニフェストは省略します。

画面が逆向きならToastを表示します。

なお、逆向き表示できるかどうかは端末に依存するようです。
Android2.2にバージョンアップしたLYNX3D SH-03Cは逆横はできますが逆縦はできませんでした。

以上、参考になれば幸いです。

2012年6月30日土曜日

[BIOS] 起動しなくなったHP ProLiant ML115 G5が直った

HP ProLiant ML115 G5 dose not boot
過去にHP ProLiant ML115 G5にメモリーを増設したらメモリーを増設したら起動しなくなったということがありました。

その後もオーディオインターフェイスを増設したりCPUを交換したりするうちに、電源を入れても画面が真っ暗なまま起動しないことが多くなりました。
何度か電源を入れ直せば起動するので故障ではないようです。
起動した後も、ごく稀にIRQL_NOT_LESS_OR_EQUALというブルースクリーンが表示され再起動することもあります。

いろいろ試した結果、メインボード(マザーボード)のClear CMOS(SW2)ボタンを押したら安定て起動するようになりました。
ただし、Clear Clear CMOSボタンはBIOSの設定が全て初期化されます。
カレンダーと時計と累計起動時間が初期化され、BIOSに記録されているログまで消去されます。カレンダーは遙か昔の日付になってしまいました。
Clear CMOSボタンを押す前はBIOSの設定内容を全てメモしておくことをおすすめします。
押す必要があるかどうかはハードウェアの故障やデバイスドライバーの不具合など、他の原因と切り分けて判断するべきです。

また、今まではMemory Channel ModeをCombinedにしなければ起動しませんでしたが、COMSボタンを押した後はIndependent の設定でも安定して起動するようになりました。
ただし、Independent に設定してもWindowsエクスペリエンスの評価は変わりませんでした。

以上、参考になれば幸いです。

2012年6月23日土曜日

[PlasStation Mobile] オーディオファイルを再生するには

How to correct the FileNotFoundException of audio files

オーディオデータを再生するためのサンプルアプリです。
ソリューションにwavフォーマットのオーディオファイルを追加します。
今回は「audio.wav」というファイルを追加しました。

このオーディオファイルを再生するだけのソースを書きます。
AppMain.cs
このままビルドして実行するとエラーが起きます。
System.IO.FileNotFoundException has been thrown
追加したオーディをファイルを右クリックして[ビルドアクション]-[コンテンツ]に設定します。
これでオーディオが再生できるようになりました。
ソリューションに複数のオーディオファイルを追加した場合は、それぞれのファイルを[ビルドアクション]-[コンテンツ]に設定する必要があります。
(画像データは追加するとビルドアクションが自動でコンテンツに設定されます)

ここまではSDKドキュメントに書いてあることです。
しかし、この手順通りに操作してもどうしてもオーディオを再生できないケースがありました。

SoundPlayer は、アシッダイズ(テンポ情報を埋め込んだwavファイル)はサポート外のようです。
アシッダイズのオーディオファイルを再生した場合もSystem.NotSupportedExceptionが起きます。

DAWでオーディオファイルを管理している開発者は特にご注意ください。DAWで扱うオーディオファイルはテンポ情報を埋め込んだ方が便利ですからね。
市販のオーディオ素材にもアシッダイズされたものがあるのでご注意ください。
Windows Media Playerで再生できるのにPS Suite SDKでSystem.NotSupportedExceptionが起きる場合は、アシッダイズされたオーディオファイルかもしれません。

Androidでオーディオデータを再生させるときの注意点も公開しています。
[Android] SoundPoolのオーディオ再生ミスをなくす

以上、参考になれば幸いです。

2012年6月16日土曜日

[Application] Eye元気!が 最新スマートフォンベストアプ に掲載されました

Eye元気!が
手順でわかる! 最新スマートフォンベストアプリ Android 4.0/2.3対応
インプレスジャパン・株式会社エディポック 著 1,050円
http://www.impressjapan.jp/books/3223
に掲載されました。

「Android端末の使い方から、アプリの使い方までがわかる、インストールしたあとも読みつづけられる1冊」です。

先ほど買ってきましたが、全面カラーでアプリごとの操作がわかりやすく説明されています。
知ってトクするTipsも充実しています。
是非手元に置いておきたい一冊です。

Eye元気!はこちらからダウンロードできます。
目のストレッチアプリ Eye元気!/Vigorous eyes!