2009年1月アーカイブ

※追記:この記事の内容はAndroi1.6までの内容であり、Android 2.0以降では適用できません

詳細は、以下のGoogle codeの書き込みを参照してください

http://code.google.com/p/android/issues/detail?id=5508

→ Android2.2 ではAndroid2.0/2.01/2.1の不具合が解消され、
 -http-proxy http://xxx.xxx.xxx.xxx:8080 などの方法で使用できることを確認しました。 

Androidエミュレータのプロキシ設定について、
Googleさんの公式ドキュメントは、
こちら(http://code.google.com/intl/ja/android/reference/emulator.html#proxy)にあります。

下記のような症状でお困りの方が対象です。

  • ブラウザを起動しても応答がない
  • 「Web page not available」と表示される
  • 「! The page at 'http://... ERROR [object Object」]と表示される

設定方法の要点だけ言えば、
エミュレータ(emulator)起動時に、以下のような引数を追加して起動すれば良いということです。
(以前(m3-rc22a)は、asb shellからsqliteでsettings.dbを書き換えてた方法の別のやり方です。)

  • プロキシ認証が不要な場合
emulator -http-proxy http://<machineName>:<port>
  • プロキシ認証が必要な場合
emulator -http-proxy http://<username>:<password>@<machineName>:<port>

※<machineName><port>などのカッコ<>は不要です
※上手くいかない場合、machiNameのホスト名(ドメイン名)をIPアドレスを直うちしてみてください
※Android 1.0 SDK, Release 1をお使いの方は、Android 1.0 SDK, Release 2に移行してみてください(当方は何故か、これで解決しました。Release 1のエミュレータヘルプで、-http-proxy(ハイフン)でなく-http_proxy(アンダースコア)と表示されるのと関係あるのかな?)

上手くいけば、デフォルトでインストールされているBrowser(ブラウザ)アプリでWebにアクセスできます。

エミュレータを手動で起動している方は、Windowsとかだと、ショートカットを作成し、リンク先へ引数を追加してあげれば次回以降、ショートカットを呼び出すだけです。

Eclipseをお使いの方は、前述の方法で、先にエミュレータを起動しておく。。。でも可能ですが、Eclipseで設定しておく方法をお勧めします。

Eclipseで設定する方法は、
EclipseのWindowメニューからPreferencesを選択し、
Android > Launch の Default emulator options に
上記引数(-http-proxy~)を追加し、Apply > OKを押してください。

※追記:Android2.2では上記方法で使用できることを確認しました

ただし、設定が有効になるのは、これ以降に作成したプロジェクトであるため、
既存のプロジェクトに反映させるには、
EclipseのRunメニューからRun/Debug Configurationsを選択し、
左側のペインで目的のプロジェクトが選択されている状態で、
Targetタブを選択し、
Additional Emulator Command Line Optionsに上記引数(-http-proxy~)を追加してください。
(ここで設定する場合、プロキシ認証が必要な場合でも、認証をつけると上手くいかず、認証の記述を外すと上手くいく場合がありますので、上手くいかない場合には、諦めずにトライしてみてください。)

※2009/7/9追記:それでも上手くいかない場合には、こちらの方法も試してみてください
[Android] Android 1.5 エミュレーターのプロキシー設定 - adakoda

こちらのページからダウンロードできます。
※古いバージョンをお使いの方も、先のページから再度INSTALL NOWアイコンを押すと、バージョンアップできます。

アプリケーション本体は、約1000行ほどの規模ですが、結構色々なことが実現できています。AIRの実力ですね。ちなみにLWWSの処理は、真面目にライブラリ化したので約900行ほどです。

また、今回もLinuxの対応で、結構時間がかかってしまいました。。。
具体的には、コンテキストメニューの応答の違いや、フォント、GlowFilterのかかり具合の微妙な差違です。最終的には、Windowsで実行した場合に最も奇麗に見えるような状態で断念しました。。。

お天気Webサービスを使用する際に必要な「地域別に定義されたID番号」については、ハードコーディングするのでなく、RSS(全国の地点定義表)から取得するのがよいでしょう。

例えば、Action Script 3(AS3)では、以下のように記述します。

private function hoge():void
{
    var url:String = "http://weather.livedoor.com/forecast/rss/forecastmap.xml";
    var urlRequest:URLRequest = new URLRequest(url);
    var urlLoader:URLLoader = new URLLoader(urlRequest);
    
    urlLoader.addEventListener(Event.COMPLETE, onUrlLoaderComplete);
    urlLoader.load(urlRequest);
}

private function onUrlLoaderComplete(event:Event):void
{
    var urlLoader:URLLoader = event.currentTarget as URLLoader;
    var xml:XML = new XML(urlLoader.data);

    // コメントは、出力結果(参考)です
    var ldWeatherNS:Namespace = xml.namespace("ldWeather");
    
    for each (var xmlChannel:XML in xml.channel)
    {
        for each (var xmlSource:XML in xmlChannel.ldWeatherNS::source)
        {
            for each (var xmlArea:XML in xmlSource.area)
            {
                for each (var xmlPref:XML in xmlArea.pref)
                {
                    for each (var xmlCity:XML in xmlPref.city)
                    {
                        trace(parseInt(xmlCity.@id) + ":" +
                            xmlArea.@title + "-" +
                            xmlPref.@title + "-" +
                            xmlCity.@title);
// 1:北海道地方-道北-稚内
// 2:北海道地方-道北-旭川
// 3:北海道地方-道北-留萌
// ...
// 141:南西諸島地方-沖縄県-石垣島
// 142:南西諸島地方-沖縄県-与那国島
                    }
                }
            }
        }
    }
}

結果のXMLデータには、IDとともに、area(北海道地方など)、pref(道北)、city(稚内)などの情報も格納されています。

※Weather Report AIR参照

Androidのエミュレータは、トラックボールモードをサポートしています。
操作方法は、以下のとおり。

Android 1.0 SDK, Release 1では、CTRL+Tキーを押している間だけ有効。
Android 1.0 SDK, Release 2では、DELキーをしている間だけ有効、F6キーでモードの有効/無効切り替え。

<<前のページへ 123

Android Advent Calendar 2011

2012年2月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29