スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ボリューム調節その2

今回は、端末の音量調節キーが押された時に、特定の処理を行わせるパターン。
dispatchKeyEventをオーバライドし、押されたキーの判定を行う。

-----
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int action = event.getAction();
    int keyCode = event.getKeyCode();
        switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
            if (action == KeyEvent.ACTION_UP) {
                //TODO
            }
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            if (action == KeyEvent.ACTION_UP) {
                //TODO
            }
            return true;
        default:
            return super.dispatchKeyEvent(event);
        }
    }
-----
スポンサーサイト

ボリューム調節

Androidのボリュームコントロールのやり方。
キーイベントを拾うことも出来るが、標準のボリュームコントロールが表示されるようにした方が自然。
Activityで以下の記述をすればボリューム調整ボタンを押した時にコントローラが表示されるようになる。

-----
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
    :
}
-----

フルスクリーンのアクティビティ

Androidでフルスクリーンのアクティビティを作成する方法。

-----
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // タイトルバーを削除
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    // フルスクリーンモード設定
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

}
-----

requestWindowFeature(Window.FEATURE_NO_TITLE)は、setContentView()の前に呼び出す必要がある。

引用:APIリファレンス
-----
public boolean requestFeature (int featureId)

Enable extended screen features. This must be called before setContentView(). May be called as many times as desired as long as it is before setContentView(). If not called, no extended features will be available.
-----

Android2.2未満のWebViewでのSSL通信の問題

SSL通信を行う際、ルート証明書が確認出来ない場合、通常のブラウザの場合は証明書をインストールするかどうかの警告ダイアログが表示される。
このような信頼出来ないサイトとのSSL通信をWebView経由で行っている場合、ダイアログが表示されずブランクページが表示される。

これに対する対応方法としてFroyo(2.2)ではハンドリングするメソッドがWebViewClientに用意されているが、
2.2未満のWebkitではメソッドが用意されていない為、ハンドリングが不可能。

2.2未満でこれに対応する場合は、Webkitをカスタマイズ(というか2.2のWebViewClientで無理やり上書き)し、ハンドリング用のメソッドを用意するか、SSL通信のみIntent経由で通常のブラウザに処理を委譲する必要がある。
(局所的な情報なので他にも方法はあるかも)

今回は、Webkitをオーバライドして対応する方法を紹介する。

1.FroyoのWebViewClientをオーバライド
android.webkitパッケージを作成し、以下のソースを配置。

■WebViewClient.java
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/webkit/WebViewClient.java;hb=donut-release

2.FroyoのSslErrorをオーバライド
android.net.httpパッケージを作成し、以下のソースを配置。

3.ハンドリング用メソッドを実装。
WebViewClientのSSL通信エラー発生時に呼び出されるメソッドをオーバライドし、処理を続行させる。

■SslError.java
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/net/http/SslError.java;hb=donut-release

-----
  webView.setWebViewClient(new WebViewClient() {
    public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
      handler.proceed() ;
    }
  }
-----

これで無事SSL通信が行える。

■参考
http://damianflannery.wordpress.com/2010/09/28/android-webview-with-https-loadurl-shows-blankempty-page/

Androidのマルチスクリーン対応の話

1./res/drawable
よくAndroidのアプリ開発時に画像リソースを「/res/drawable」に配置している例を見かけるがこれは良くない。
/res/drawableに配置した場合、端末本来の解像度に関係なく、中解像度(mdpi)に対応する画像だと見なされ
Androidのプラットフォームが自動的に拡大/縮小(pre-scaling)してしまい、意図した表示が行えないケースがある。
例えば、端末本来の解像度が高解像度(hdpi)の場合で、画像の配置が/res/drawableだと画像が1.5倍に拡大されて
しまい、表示がぼやけたりする。

例)端末の解像度が高解像度(hdpi)の場合
/res-drawable
└icon.ping(10px×10px) ← この画像をロード(mdpiとしてロード)
/res-drawable-hdpi
└ファイルなし ← 画像を探すがファイルがない
/res-drawable-mdpi
└ファイルなし
/res-drawable-ldpi
└ファイルなし

結果、pre-scalingが働き、15px×15pxの画像がディスプレイ表示される。

引用:Supporting Multiple Screens - Custom resources and directories
-----
If a density qualifier is not defined in a resource directory name, the platform assumes that the resources in that directory are designed for the baseline medium density. It is not recommended that you put density-specific resources such as images in the default directory.
-----

このようなケースを避ける場合は、以下の2つの場所の何れかに画像ファイルを配置する事でpre-scalingを
回避することが出来る。

/res-drawable-hdpi(端末毎の解像度の場所)
/res/drawable-nodpi

「/res/drawable-nodpi」に配置した場合は、端末の解像度に関係なく自動的にスケーリングされないようになる。
地図のピン等、特に端末により表示サイズの変更が必要ない程、小さい画像に関しては、こちらのディレクトリに
配置する場合もある。
上の例とは逆に解像度後との場所に画像を配置している場合で、配置場所よりも実際の端末解像度が小さい場合は、縮小表示される。
縮小の場合は拡大のように画像がぼやけたりはしないが、実際の表示を確認した上で、どの場所に画像を配置するか、
もしくは複数画像を用意するかは検討したほうが良い。

引用:Supporting Multiple Screens - Pre-scaling and auto-scaling of bitmaps and nine-patches
-----
There are situations in which you may not want Android to automatically scale a resource. The easiest way to accomplish this is to put it in a "nodpi" resource directory:
-----

/res-drawableフォルダには解像度毎のフォルダ以外にAPILevel毎に画像を切り替えるフォルダ等、実は色々ある。

■Supporting Multiple Screens - Resource directory qualifiers for screen size and density
http://developer.android.com/guide/practices/screens_support.html#qualifiers


2.android:anyDensity
android:anyDensityの初期値(その他もあるが)がminSdkVersion、またはtargetSdkVersionの値による異なる。
何れかが「4」以下の場合は、android:anyDensity=falseが初期値となりこれまた中解像度(mdpi)を基準に
実解像度にした場合のピクセルサイズを自動的に計算し拡大/縮小(auto-scaling)してします。
ケースとしては、実際の端末サイズが高解像度(hdpi)にも関わらず、android:anyDensity=falseとなっており
中解像度を基準に拡大表示(1.5倍)してしまい、GoogleMapの表示がぼやけたりする。

■Supporting Multiple Screens - Manifest attributes for screens support
http://developer.android.com/guide/practices/screens_support.html#attrs

このような事象を回避する場合は、Manifest.xmlで以下のように<supports-screens>要素を定義し
明示的に「android:anyDensity="true"」と記述する。

----
<supports-screens
    :
    android:anyDensity="true" />
-----

引用:Supporting Multiple Screens - 2. Auto-scaling of pixel dimensions and coordinates
-----
If the application states that it does not support different screen densities, the platform auto-scales any absolute pixel coordinates, pixel dimension values, and pixel math used in the application (such as might be used for specifying the width or padding for a view). It does this to ensure that pixel-defined screen elements are displayed at approximately the same physical size as they would be at the baseline density of "medium" (160).
-----

何気にマルチスクリーン対応は奥が深い。しかし、現在殆どの端末が高解像度なので、基準が中解像度なのは微妙な気がした。
おかげで現場で表示がぼやけるケースが続出。

AndroidのGoogleMapのAPI Keyの取得

AndroidでGoogleMAPのAPIを利用する場合に必要なAPI Keyの取得手順。

1.証明書のMD5ハッシュ値を取得
証明書のMD5ハッシュ値を取得する。取得にはkeytoolを使用する(JDKに同梱)。

keytool -list -keystore 証明書の場所

apkファイルを署名する証明書毎にAPK Keyが必要となる為、証明書毎にMD5値を求める必要がある。

【SDKの証明書の場所】
Windows7 C:\Users\ユーザ名\.android\debug.keystore
WindowsXp C:\Documents and Settings\ユーザ名\.android\debug.keystore

2.APK Keyを取得
以下のサイトで「My certificate's MD5 fingerprint」の欄に1.で取得したMD5ハッシュ値を入力する。
規約に同意する旨のチェックボックスにチェックを入れて「Generate API Key」ボタンをクリック。

http://code.google.com/intl/ja/android/add-ons/google-apis/maps-api-signup.html

3.レイアウトXMLにAPI Keyを設定
サイト上に表示されているAPI KeyをレイアウトXMLに設定。

-----
<com.google.android.maps.MapView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="02C9_1G3imbYwO1npeZCO19oTP-REIDocR7xw99"
    />
-----

以上

原発に関する資料

福島第一原発事故をきっかけに原発や核物理学について俄かに調べたので資料をまとめる。
今回調べた事についての学識等全然なく俄か仕込みの見識(と呼ぶにもおこがましいが)しか持ち合わせていないのだが、調べる中で感じた事を以下に綴る。

今回調べていて衝撃的だったのはMOX燃料についてである。
今だTVの専門家やマスメディアでMOX燃料について言及される事は殆どないが、今回事故を起こしている福島第一原発3号炉ではMOX燃料が利用されている。
通常稼動している時こそ問題はないが、事故が発生した場合の放射能汚染の影響拡大や冷却効率悪化等が指摘されている危険度の高い燃料である。

日本では将来的には全ての原発をこのMOX燃料で運転する事を計画している。
(地震の殆どないフランス・ドイツでは多くのMOX燃料の実績有り)
原発の危機管理が疑問視される中、このような危険な計画が実行されようとしていた事に驚きを感じると同時に自身の無知さに羞恥を覚えた。

無知とはとても恐ろしく罪な事だと改めて実感した。
今回の事故を受けこのような計画にも見直しが入ることが予想されるが、強引に実行されないようにもっと知見を広げる必要があると思った。

追記:
いまなお原発で作業されている作業員の方々のご健闘祈ります。

■日本の原子力発電所で重大事故が起きる可能性にMOX燃料の使用が与える影響
http://kakujoho.net/mox/mox99Lyman.html

■東京電力株式会社福島第一原子力発電所の原子炉の設置変更(1号、2号、3号、4号、5号及び6号原子炉施設の変更)に係る安全性について
http://www2.jnes.go.jp/atom-lib/online_doc/anzensinsa/fuku1-16/fuku1-16.html#4-1-2

■東京電力-原子炉にどれだけウラン燃料は入っているの?
http://www.tepco.co.jp/nu/torikumi/nuclearlibrary/atomfuel/atomfuel01-j.html

■ウランとプルトニウム
http://www.s-yamaga.jp/kankyo/kankyo-genpatsu-2.htm

■MOX燃料とは
http://www.jnfl.co.jp/business-cycle/5_kongou/kongou_03/_03_02.html

■原発がどんなものか知ってほしい(全)
http://www.iam-t.jp/HIRAI/pageall.html

■「原発がどんなものか知ってほしい」の嘘
http://nucnuc.at.webry.info/200605/article_1.html

■『「原発がどんなものか知ってほしい」の嘘』の嘘
http://d.hatena.ne.jp/JPLAW/20080220/1203522749

パスワードクラッカー

パスワードクラッカー。

■john
http://www.openwall.com/john/
プロフィール

まこち

Author:まこち
スマートフォンのアプリ開発やWebサイト構築等を仕事や趣味でやっています。
最近はグラフデータベースも始めました。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。