2011年1月15日土曜日

[Firefox] AndroLibをブラウザーで表示できない

How to solve the problem with browsing "AndroLib"

androlib.comをFirefox3.6で表示しようと思ったらエラーが出てしまいました。
内容符号化(Content-Encoding)に問題があります
内容符号化(Content-Encoding)に問題があります
パケットをモニターしたところ、特定のファイアウォール(プロキシサーバー)内からアクセスするとgzipで圧縮された内容が正常に送受信できないことがわかりました。
このファイアウォールはCookie文字列が長いと途中で勝手に改行して502エラーを起こすなど癖のある製品です。
シェアがほとんどないプロプライエタリーなので、お目にかかる機会はないと思います。

gzipが原因なのでFirefoxがgzipを使用しない設定します。
手順はを次の通りです。
  1. URLに about:config と入力
  2. 「細心の注意を払って使用する」ボタンをクリック
  3. フィルタ欄に「gzip」を入力すると network.http.accept-encoding という設定名が出てくるのでダブルクリックし、値を消してOKボタンをクリック
  4. network.http.accept-encoding
これで正常にandrolib.comを表示できるようになりました。
ところが、この設定をしたらプラグインのChaikaが正常に動作しなくなりました。他にも問題があるかもしれません。
結局、androlib.comを見終わったら設定を元に戻すことにしました。
(右クリックして「リセット」をクリックすれば元に戻せます)

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

インターネットを見すぎて目が疲れたら「Eye元気!/Vigorous eyes!」で眼球ストレッチしましょう!

2011年1月12日水曜日

[PR] 「slコマンド for Android」がアンドロイダーに掲載されました

http://androider.jp/?p=27196
ドロシー様、ロイダーさん、ありがとうございます!

「slコマンド for Android」の詳細はこちらでご覧いただけます。
http://fujiu.jp/AndroidApp/app003_sl.shtml
つたない出来ですがソースも公開しています。

「slコマンド for Android」のソースを元に開発した 「Eye元気!/Vigorous eyes!」もよろしくお願いします

2011年1月11日火曜日

[Android] PrintStream#printfの最適化(SDK r08でのエラーを別の方法で解決する)

How to solve the problem that "Multiple annotations found at this line" by a better method

[Android] SDKをバージョンアップしたらエラーだらけになったについて TwitterでJiroさんから別の解決方法を教えてもらいました。
→http://twitter.com/#!/jiro_aqua/status/24100488370720769
Jiroさん、ありがとうございました。

変換指定文字についてjava.sun.comのリファレンスを調べたところ、書式文字列には引数リスト内での引数の位置を整数で示すように解説されています。

エラーが起きた書式です。
<string name="YourSelection">%s %s が選択されました</string>

この書式に引数の位置を加えます。
<string name="YourSelection">%1$s %2$s が選択されました</string>
これでエラーはなくなりました。

エラーメッセージの Multiple substitutions specified in non-positional format は「変換指定文字が複数あるのに引数の位置が指定されてない」ということでした。
変換指定文字が一つしかなければエラーにならないわけです。

引数の位置を指定するメリットはアプリケーションを多言語に対応させるときに発揮します。
日付の書式を日本語と日本語以外に対応させたサンプルを作ってみます。
サンプルの内容はActivityを起動すると日付をToastで表示するというものです。

日本語の年月日の書式を res/values-ja/string.xml に
<string name="date">%1$d年 %2$d月 %3$d日</string>
と設定します。

日本語以外の端末では日月年の順に表示するように res/values-eng/string.xml に
<string name="date">day:%3$d month:%2$d year:%1$d</string>
と設定します。

Activity(Main.java)のコードはこのようになります。


端末の設定が日本語の場合
端末の設定が日本語以外の場合

言語ごとの書式に引数の位置を指定しておけばJavaコードを変更することなく意図した内容を表示できるわけです。

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

変換指定文字を使っている 「Eye元気!/Vigorous eyes!」、 「お天気ロイド/Weatheroid(JP)」 どちらも公開中です!

2011年1月9日日曜日

[Android] SDKをバージョンアップしたらエラーだらけになった

How to solve the problem that "Multiple annotations found at this line"

※もっといい方法がありましたので http://blog.fujiu.jp/2011/01/android-sdk-r08.html をご覧ください

Eclipseで開発していますが、Android SDKをr08にバージョンアップしたらエラーを示す赤いバツ印だらけになりました。
たくさん表示されますが、原因はstring.xmlにあることがわかりました。
バージョンアップ前はstring.xmlにエラーはありませんでした。

<string name="YourSelection">%s %s が選択されました</string>
の行にエラーが出てます。

マウスポインターを重ねるとこんなメッセージが表示されます。


エラーが発生した箇所をこのように修正したところ赤いバツ印はなくなりました。

<string name="YourSelection" formatted="false">%s %s が選択されました</string>

%s や %d の変換指定文字を使うとこのエラーが発生することがあるようですが、変換指定文字を使ってもエラーにならない箇所もあります。
string.xmlの中で同じエラーが発生している箇所すべてにformatted="false"を追記したところ、エラーはなくなりました。
string.xmlのエラーのを修正したらlayoutの赤いバツ印も消えました。
Android SDK r08はこの症状に加えてadb.exeの格納フォルダーがtoolsからplatform-toolsに変わってるので最初はちょっと戸惑います。

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

変換指定文字を使っている 「Eye元気!/Vigorous eyes!」、 「お天気ロイド/Weatheroid(JP)」 どちらも公開中です!

2011年1月3日月曜日

[Android] スマートフォン料金(パケット代)の節約術

How to save the packet communication fees

あけましておめでとうございます。

「データ通信」を遮断するとパケット料金を節約することができます。設定方法は次の通りです。

[設定]-[無線とネットワーク]-[モバイルネットワーク]-[データ通信]-[データ通信を有効にする]のチェックを外す
(Androidのバージョンや機種によって表現が異なるかもしれません)

ただしデータ通信をオフにすると多くの制限があるので注意が必要です。

データ通信をオフにするとできないこと
  • spメールやEZメールの送信・受信
  • 3G接続によるアクセスを必要とするアプリケーション
3G接続によるアクセスを必要とするサービスは、OSのアップデートやクーポン発行サービスなど多数存在します。
また、移動中にデータ通信が必要なアプリ(ナビやプレイスなど)も使えなくなります。

データ通信をオフにしてもできること
  • 通話の発信・着信
  • spメールやEZメールの新着を通知を受け取ること
  • Wifiに接続していればブラウザー・Android Market・Gメールの利用は可能

MtkはSIMカードを装着したままspメールやEZメールを送受信する瞬間とケータイアップデートするときだけデータ通信を利用し、それ以外はWifiで利用するという操作をしてみました。
その結果、1ヶ月あたりのパケット料金は400円未満でした。
節約はできたけど面倒です。
複数台のAndroidスマートフォンを所有している方におすすめします。

契約次第では3G回線を使わなければ1ヶ月の料金を2000円以下に抑えることができます。
(2013年8月24日追記)

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

2010年12月30日木曜日

[Android] SurfaceviewにToastを表示するには

How to show Toast when a SurfaceView is being shown

ToastはActivityだけではなく、SurfaceViewでも表示できます。
ただしToastはContextオブジェクトを必要とするのでちょっと工夫します。
SurfaceViewにToastを実装する前のコードがこちらです。

マニフェスト(AndroidManifest.xml)


Main.java (Activity)


MySurfaceView.java (SurfaceView)


このコードを端末を回転させるたびにToastを表示させるように改造します。
回転のたびに呼び出されるSurfaceViewのonSizeChangedメソッドでToastを表示する方法を2つあげてみました。

1,コンストラクターのcontextを使う
2,ActivityのインナークラスにしてgetApplicationContext()を使う

1,コンストラクターのcontextを使う

1つ目の方法は、SurfaceViewがコンストラクターで受け取ったcontextをToastに渡す方法です。
MySurfaceView.java (SurfaceView) のみを改造します。


これで画面を回転するたびにToastが表示されるようになりました。
エミュレーターなら左のCtrl+F12で検証できます。

2,SurfaceViewクラスをActivityクラスのインナークラスにして、ActivityクラスのgetApplicationContext()を使う

2つめの方法はMain.java (Activity) のみを改造します。
Activityクラスの内部にSurfaceViewクラスを定義します。


この改造も動作は1と同じです。
この方法はSurfaceViewクラスからActivityクラスのメンバーにアクセスできます。
ただし、SurfaceViewを他のActivityから起動することが難しくなります。

関連ブログ

[Android] Toastをcancelするには

キーワード
Toast Activity SurfaceView getApplicationContext() onSizeChanged

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

SurfaceViewにToastを表示する「Eye元気!/Vigorous eyes!」公開中です!

2010年12月27日月曜日

[PR] 「お天気ロイド」がOCTOBAに掲載されました

「お天気ロイド」がOCTOBAに掲載されていました。
http://octoba.net/archives/20101025-otenkiwidget-android-1102.html
ありがとうございます!