設定 - みる会図書館


検索対象: 出かけよう、Android !
83件見つかりました。

1. 出かけよう、Android !

第 5 章 BIuetooth 通信 ・サービスを検出して他の機器に接続する ・他の機器との間でデータをやりとりする ・複数の接続を管理する Bluetooth を扱う際には AndroidManifest. xml の <uses-permission> に「 an- droid. permission. BLUETOOTH 」のパーミッションの指定が必要です。また 端末の Bluetooth 機能の有効 / 無効設定やリモートデバイスの検索を行う際は 「 android. permission. BLUETOOTH ADMIN 」のパーミッションも必要にな ります。 BIuetooth 機能を用いたアプリケーションを開発する際の注意する点として、 Bluetooth の接続処理やデータの送受信処理などでは処理が完了するまでに一定 時間応答を待っことがあり、 ANR (Application Not Responding) となる場合 があります。 ANR を防ぐために、 BIuetooth の接続処理やデータの送受信処理 などは、 Activity の UI スレッドではなく別のスレッドで行うようにしましよう。 5.3 自端末の BIuetooth 設定制御 (BIuetoothAdapter) アプリケーションから Blueto 。 th を有効 / 無効設定をするサンプルプログラム を次に示します ( リスト 5.1) 。 リスト 5.1 : Bluetooth 設定制御 B1uetoothAdapter btAdapter = B1uetoothAdapter. getDefau1tAdapter ( ) ; / / btAdapter が null の場合は B1uetooth がサポートされていない ー null){ if (btAdapter / / ユーザに通知するなど return ; if ( !btAdapter. isEnab1ed() ) { / / B1uetooth が OFF 状態 / / 有効にするリクエストを投げる lntent intent = new lntent (B1uetoothAdapter. ACTION-REQUEST-ENABLE) ; startActivityForResu1t (intent , REQUEST-BT-ENABLE) ; / / REQUEST_BT_ENABLE は” 0 " などの定数 Bluetooth の有効 / 無効状態の取得には BIuetoothAdapter クラスの isEn- す 川 8

2. 出かけよう、Android !

第 8 章ローカライズとアクセシビリティ Java プログラム内の文字列を getString(). string. xxxx) で参照する Toast の引数やダイアログのメッセージなど、 Java プログラム内でユーザーに 表示するために文字列を指定するシーンはいくっかあります。端末の言語設定を 反映させるため、 Java プログラム中では文字列を " " で指定するのではなく、次 get- String(). string. xxxx) の戻り値を渡す ・ String や CharSequence を引数にとるメソッドの場合 ・ int resld を引数にとるメソッドの場合、 R. string. xxxx を渡す のような方法で指定します。 170 されます。 ばれ、現在の言語設定に対応した strings. xml ファイルが見つからない時に使用 れます。なお、 res/values フォルダ内の strings. xml はデフォルトリソースと呼 これにより、端末の言語設定に応じて参照する strings. xml ファイルが変更さ 3. コピーした strings. xml ファイルの文字列をその言語に翻訳する する 2. res/values/strings. xml を res/values-< 高ロロ 一コード > フォルダにコピー res/values-en フォルダを作成する 1. res/values-< ロロ コード > フォルダを作ります。たとえば英語であれば strings. xml を用意します。 レイアウト XML と Java プログラムを修正した後、以下の手順で各言語用の res/values-en/strings. xml など別言語リソースを作成する た文字列を取得し、それを使用します。 Fragment の getString(int resld) メソッドを使用して、端末の言語設定に従っ や、文字列の一部をユーザー名などに置き換えて使用したい場合、 Activity や セットする文字列として String や CharSequence しか受け取れないメソッド の name 属性に設定した名前にします。 R. string. xxxx を渡すことで多言語に対応させます。 xxxx の部分は strings. xml けでなく、 int 型の resld を指定することができます。この場合、引数として ドなど、一部のメソッドはセットする文字列として CharSequence(String) だ TextView の setText メソッドや AlertDialog. Builder の setMessage メソッ

3. 出かけよう、Android !

第 3 章センシングデバイス ・ SensorEventListener ・ SensorEvent 使い方としては、 SensorManager をシステムから取得し、使用するセンサーを 指定します。センサーイベントを受け取るように設定すると、 SensorEventLis- tener で設定したリスナーで SensorEvent を受け取れるので、これを解析すると いう流れになります。では具体的に見て行きます。 まずは SensorManager をシステムから取得します ( リスト 3.1) 。 リスト 3.1 : センサーマネージャの取得 private SensorManager mSensorManager ; (SensorManager)getSystemService(Context . SENSOR—SERVICE) ; mSensorManager 例として、 Acceleration ( 加速度センサー ) を取得します ( リスト 3.2 ) 。 リスト 3.2 : センサーの取得 Sensor acceleration mSensorManager. getDefau1tSensor (Sensor. TYPE—ACCELEROMETER) ; 次にセンサーを有効にします ( リスト 3.3 ) 。 リスト 3.3 : センサーの有効化 mSensorManager. registarListener (this , acceleration, Sensor. SENSOR-DELAY-NORMAL) ; これで、該当する Activity に SensorEventListener が設定され、イベントリ スナーが呼ばれるようになります。 SensorEventListener の実装を見ていきましよう。 意します ( リスト 3.4 ) 。 リスト 3.4 : イベントコールバック 44 こではリスナーは 2 つ用

4. 出かけよう、Android !

7.4 工ミュレーターでのテスト ・エミュレーターのスクリーンサイズとピクセル密度を指定する 次に、テスト対象となるエミュレーターを作成しましよう。 Android Virtual Device Manager を起動し、 Create ボタンをクリックします。クリックすると、 図 7.4 のダイアログが表示されるので、 Device 棚で端末の種類とピクセル密度 を、 Skin 欄でスクリーンサイズを指定します。表 7.4 に Skin とピクセル数の関 係を示します。 AVDName• EditAndroid Ⅵ代 u 0 にを ( AVD ) hd D をⅵ ( ・ 、 Nexus 5 ( 4.0 480 x 800 : hdpi) : Android 4.03 ー APt 一 15 : ARM ( 誂 m ・ a し 77a ) ( 円リ A 創 . 稲爬 k d 町”を麒 、 Skin with dynamic hardware controls List F 「 0 ( an 宿 : Back Camera: RAM- 34 ヨ VMHeap M 町れ 0 Ⅳ 0 則 on 、 : ~ 00 MiB tem 0 90 SD Cardi MiB 翫 Ow ゝと 図 7.4 ェミュレーターの新規作成 ・ディスプレイ上にインチ数を指定してエミュレーターを起動する 工ミュレーターの作成時にスクリーンサイズを指定しますが、指定したサイズ をそのまま PC のディスプレイで表示すると、場合によってははみ出てしまい、 画面全体を表示できないことがあります。これは、エミュレーターで設定したピ クセル密度と、 PC ディスプレイのピクセル密度が異なるためです。 この間題を解決するため、エミュレーターの起動時に、指定したインチ数でディ スプレイに表示するための設定を行います。 Android VirtuaI Device N1anager で Start ボタンを押すと、図 7.5 のダイアログが表示されます。 こで Scale displaytorealsize にチェックをつけ、インチ数とディスプレイの dpi を指定し 165

5. 出かけよう、Android !

8.1 ローカライズ res/values/strings. xml を作成する リスト 8.1 に、アプリ名と す。 name 属性を用いて文字列 ( メッセージ ) に名前を付けていきます。この時、 まず、 strings. xml にアプリケーションで利用する文字列の一覧表を作成しま リスト 8.1 : strings. xml の例 メッセージの対応を記述した例を示します。 は使用することができないので注意しましよう。 ・ Java の予約語 ( たとえば switch など ) ・数字で始まる名前 く resources> く string name= く string name= く /string> く /resources> く string name="settings"> 設定く /string> ” error—failed—to—connect"> サーノヾ "app-name"> メモ帳アプリく /string> ーに接続できませんでした。 レイアウト XML 内の文字列参照を@string/xxxx に変更する 次に、レイアウト XML 内の文字列 (TextView や Button など ) を置き換 えていきます。 android:text や android:hint など、文字列を指定する箇所を @string/xxxx 形式で指定します。 xxxx の部分は、先ほど作成した strings. xml の name 属性に設定した名前を指定します。たとえば、リスト 8.2 では、 TextView に「メモ帳アプリ」が表示されます。 リスト 8.2 : TextView の文字列を置き換える く TextView android : layout-width="wrap-content " android : layout-height="wrap-content ” android:text="@string/app—name ” 169

6. 出かけよう、Android !

第 8 章ローカライズとアクセシビリティ フォーカスがあたっている状態で右フリック ( 順送り ) を行うと、 @十 id / button2 の順序は View のツリー構造に依存します。リスト 8.3 で、 @十 id/buttonl に TalkBack が ON の時は、左右フリックでフォーカスが移動します。この時 左右フリックに対応する 式で指定するようにします。 ましよう。読み上げ用の文字列もローカライズのことを考え、 @string/xxxx 形 か分からないので、 android:contentl)escription に読み上げ用の文字列を設定し これでは目の不自由な方が画像をタップした時、どのような画像をタップした droid:contentDescription が設定されていないと、読み上げが行われません。 が、 ImageView など、 android:text を持たない View や ViewGroup は、 an- ton であれば、 android:text が設定されているので読み上げが行われます または android:contentl)escription の内容を読み上げます。 TextView や But- View や ViewGroup にフォーカスがあたった時、 TalkBack は android:text 読み上げ用文字列を設定する リスト 8.3 : レイアウト XML にフォーカスが移動します。 andro i d andro i d く Button android android . く Button :text="@string/button2" : layout—below="@+ id/buttonl " android : layout_height="wrap—content ” android : layout_width="wrap_content ” android: id="@+ id/button2" :text="@string/buttonl" ・ layout—height="wrap—content ” android : layout_width="wrap—content ” android: id="@+ id/buttonl" 172 後ろの View にフォーカスがあたってしまうとユーザーは混乱してしまいます。 図 8.1 のようにレイアウトを重ねて表示するケースもあるでしよう。この時、 フォーカスの制御を行う

7. 出かけよう、Android !

8.2 アクセシビリティ これを防止するため、 View にフォーカスを当てない設定を行うことができます。 ー AndroidApp レイアウトを重ねて表示 (View) 上に重ねた部分のテキスト ペースのレイアウト 図 8.1 droid:importantForAccessibiIity="no" をフォーカスを当てたくない View に レイアウト XNIL でフォーカスを当てないようにするには、 an- 173 android : layout—width= ” match—parent ” く Re1ativeLayout く /Re1ativeLayout> android: importantForAccessibi1ity="no"/> android:text="@string/base—text" android : layout—height= ” wrap—content ” android : layout-width="wrap-content " android: id='t@+ id/text—base" く TextView android : background="#FFCCCCCC"> android : layout—height="match—parent ” android : layout—width="match—parent ” く Re1at iveLayout リスト 8.4 : レイアウト XML でフォーカスを当てないよう設定 る例です。 指定します。リスト 8.4 は@+id/text base にフォーカスを当てないようにす

8. 出かけよう、Android !

第 3 章センシングデバイス 理 * 6 で通知する仕組みがあります。 バッチ処理が実行されるまでは、センサーは低消費電力な状態を維持できるの で電池の消費を抑えることができます。このバッチ処理の間隔は設定ができる ます。 バッチモードは、スクリーンがオフの状態やシステムがスリープ中でも動作 するため、フィットネスや位置情報の追跡や監視などに有効な手段となります。 Android 4.4 からは歩行検出センサーと、歩数計センサーが使用可能になってお り、特にこの辺りのセンサーを使用する場合に有効な手段となります。 バッチモードを使用するには、 LocationManager#registerListener メソッド で指定します。通常のセンサーのメソッドにバッチ処理時間が引数で増えてい ます。 次の例はバッチ処理として 1000 * 1000 * 10 な s = 10S に設定した場合です ( リスト 3.14 ) 。 リスト 3.14 : バッチモード設定 private Sensor mStepDetector; boolean status = mSensorManager. registerListener(this, mStepDetector , SensorManager. SENSOR-DELAY—NORMAL, 10000 ) ; ただし、バッチ処理が可能かどうかはセンサーの対応によるので、対応してい る場合のみ戻り値 status に true が返ります。 注意点としては、バッチモードで使用されるデータバッフアの FIFO (First ⅲ First Out) はすべてのアプリで共通になるため、「他のアプリで通常のセンサー を使用されてしまうと自分のアプリで思ったようにバッチモードが動かない」と いう場合があります。 3-9 GPS センサーの概要 重要なデバイスとして GPS センサーがあります。 GPS は "GIobaIPositioning System" の略で、アメリカが上げた高度約 2 万キロに位置する軍事用衛星の複 数からの電波を受信することで、現在位置を正確に知ることができます。 、 6 https ://source.android.com/devices/sensors/batching.html 64

9. 出かけよう、Android !

7.2 サポートする機種を増やす parent . addView(button, params) ; Re1ativeLayout . LayoutParams . WRAP-CONTENT 159 けてしまうことになります。このような事態を避けるため、ピクセル密度に応じ に使用されます。つまり、ピクセル密度の高い端末では画像が拡大されて、ぼや りに res/drawable-mdpi フォルダにある icon. png を 2 倍に拡大して ImageView この場合、 res/drawable-xhdpi フォルダに icon. png ファイルが無いので、代わ 4. アプリをピクセル密度 xhdpi の端末で実行する 3. ImageView の android:src に@drawable/icon を指定 2. res/drawable-xhdpi フォルダには icon. png を持たない 1. res/drawable-mdpi フォルダに 48 x 48px の icon. png を持つ こで、次のような状況を考えてみます。 ピクセル密度が xhdpi の時に使用されます。 xhdpi フォルダにいれて使用します。 drawable-xhdpi にいれた画像は、端末の アプリ内で使用する画像は、 res/drawable-mdpi フォルダや、 res/drawable- 7.2.3 ピクセル密度に応じた画像を用意する てユーザー体験の低下につながります。 使用した場合、せつかくユーザーが設定した文字サイズが反映されず、結果とし android:textSize には単位として sp を使用しましよう。 dp や px を単位として りました。この設定をレイアウトに反映させるため、 TextView や Button の Android 4.0 より、ユーザーは文字の大きさを設定で変更できるようにな 7.2.2 文字サイズの単位に sp を使用する droid:layout_margin や android:padding には単位として dp を使用しまし い端末で間隔が広すぎたりしてしまいます。この問題を解決するため、 an- と、ピクセル密度の高い端末で間隔が狭く見えたり、逆にピクセル密度の低 また、 android:layout_margin や android:padding の単位に px を使用する

10. 出かけよう、Android !

第 5 章 BIuetooth 通信 発見可能な状態でいる時間をインテントに設定することもできます。その場 合、インテントの付加情報として EXTRA DISCOVERABLE_DURATION に時間 ( 秒 ) を設定します。 サンプルプログラムを次に示します ( リスト 5.7 ) 。 リスト 5.7 : デバイス検索への応答 lntent intent = new lntent (Bluet00thAdapter. ACTION-REQUEST—DISCOVERABLE) ; intent. putExtra(B1uet00thAdapter. EXTRA-DISCOVERABLE-DURATION , 300 ) ; startActivityForResu1t (intent , REQUEST_BT_DISCOVERABLE) ; / / REQUEST-BT-DISCOVERABLE は " 1 " などの定数 図 5.3 のような Bluetooth 許可リクエストダイアログを表示されます。ユー ザが許可をすることで、自端末は一定時間 ( サンプルコードの場合は 300 秒間 ) 、 別の Brueto 。 th 機器からのデバイス検索に対して発見可能な状態になります。 ダイアログでユーザが許可をすると、 onActivityResult メソッドにコールバッ クがきます。引数 resultCode には設定した発見可能な時間の値 ( 秒 ) が入って います。 自端末が Bruetooth 機器として発見可能な状態かどうかの変化が起きた場合、 BroadcastReceiver で通知を受け取ることができます。それを実現するために はあらかじめ「 ACTION SCAN MODE CHANGED 」インテントを Broad- castReceiver として登録します。状態の変化がおき、 BroadcastReceiver で受け 取ったインテントには、古い状態「 EXTRA_PREVIOUS_SCAN MODE 」と 新しい状態「 EXTRA SCAN MODE 」に次の値が入っています。 ・ SCAN MODE CONNECTABLE DISCOVERABLE : 発見可能な状 態でかっ、接続も可能な状態 ・ SCAN MODE CONNECTABLE : 発見可能な状態ではないが、接続 可能な状態 ・ SCAN MODE NONE : 発見可能な状態でもなく、接続もできない状態 114