Browsing articles in "デバイス"

カメラ機能を無効にする

11月 29, 2011   //   by UpDown-G   //   Android, デバイス  //  No Comments

Android4.0では、カメラ機能を無効にすることができます。
例えば工場や職場のオフィスなどでスマートフォンを使用する場合、カメラで撮影すると情報漏洩に繋がるような現場では、カメラ機能をオフにすることで、情報漏洩を未然に防ぐことができます。

今回は、ボタンを押すとカメラ機能がオフになるサンプルアプリを例に、APIを解説していきます。

図:デバイス管理者権限切り替え画面(左)、サンプルアプリ画面(右)

図:カメラ無効時のカメラアプリ起動時画面

ポイントとしては次の点です。

  • デバイスの管理権限を有効にする
  • セキュリティーポリシーの宣言
  • setCameraDisabledメソッドにてカメラを無効にする

それでは続きをどうぞ

Read more >>

Bluetooth Health Deviceと通信する

11月 28, 2011   //   by @mhidaka   //   デバイス  //  No Comments

Android 4.0(IceCreamSandwich)からBluetoothのHealthデバイスのサポートが追加されました。
ヘルスデバイスとは医療、フィットネス、健康器具などヘルス分野の製品のことで、Bluetooth Health Device Profile(HDP)としてBluetoothでは通信を規格化しています。
4.0での対応により、AndroidからもHDP対応ヘルスデバイスを使えることになりました。Health Device Profile対応により、血圧計、歩数計や体重計など健康器具とのデータ交換が容易に行えます。

今回は、Bluetooth Health Deviceとの通信方法を紹介します。
android.bluetoothパッケージにBluetooth Health関連クラスが追加されています。

追加されたクラス名説明
BluetoothHealthクラスBluetoothHealthデバイスを管理する
BluetoothHealthAppConfigurationクラスBluetoothHealthデバイスへの接続設定を保持する
BluetoothHealthCallbackクラス BluetoothHealthデバイスの状態変更通知を受け取る

application configurationとは、ヘルスデバイスとの接続に利用されるアプリケーション設定で、サードパーティ、開発者がヘルスデバイスとBluetoothで通信するための状態通知コールバック設定、設定名などが格納されています。

接続するためのサンプルコードは以下のとおりです。
※Android 4.0およびヘルスデバイスを入手できていないため、本記事でのサンプルコードは、概要を理解するためのコードスニペットとお考えください。実際に試すには修正が必要です。
Read more >>

WiFi DirectでP2P通信を行う(2)

10月 31, 2011   //   by @mhidaka   //   デバイス  //  No Comments

WiFi DirectとはWiFi対応機器同士を直接接続するP2P通信方式です。
P2P通信の名前の通り、アクセスポイントを必要としないことから、手軽に無線LANを使って通信できるAndorid 4.0の注目の新機能です。
(無線LANでは以前から1対1通信を行うアドホックモードが存在していましたが、WiFi Directではさらに発展させた1対複数通信が可能です)

前回の「WiFi DirectでP2P通信を行う(1)」の続編です。ブロードキャストレシーバに関してはこちらを参照してください。
今回も前回同様、WiFiDirectDemoをサンプルにWiFi Directの接続・切断処理、接続処理中のキャンセルについて解説します。
WiFiDirectDemo http://developer.android.com/resources/samples/WiFiDirectDemo/index.html

注意:Android SDKのAPI ReferenceではWiFi Directを”Wi-Fi p2p”、WiFi Direct対応デバイスを”Peers”と別名で表記しています。記事中でも気をつけて触れていますが随時読み替えてください。
(まだ実機での動作確認ができていませんので記事の記載に誤りがあった場合、随時アップデートします!)

WiFi Directの接続/切断処理のポイントは以下の通りです。

WifiP2pManagerの大事なメソッド

メソッド名説明
ActivityクラスgetSystemService(Context.WIFI_P2P_SERVICE);WifiP2pManagerのインスタンス取得
WifiP2pManager.Channel initialize (Context srcContext, Looper srcLooper, WifiP2pManager.ChannelListener listener) 初期化を行う。第3引数は接続切断時のリスナー、nullでもよい。返り値のChannelは接続チャンネルを識別するために利用する
connect (WifiP2pManager.Channel c, WifiP2pConfig config, WifiP2pManager.ActionListener listener)
P2P接続の開始。接続情報は第2引数WifiP2pConfigに格納する
removeGroup (WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)
P2P接続の切断。切断したいChannelを指定する
cancelConnect (WifiP2pManager.Channel c, WifiP2pManager.ActionListener listener)
P2P接続処理中(ネゴシエーション中)のキャンセル。接続処理が完了した後はremoveGroupを使用すること。

また前回記事で紹介したWiFi Directの接続状態通知の仕組み(ブロードキャストレシーバの挙動、前回記事参照)について復習しておいたほうがよい内容をまとめています。あわせて確認すると理解が深まるでしょう。
意識的に接続しにいく場合以外では、WiFi Directでの接続状態や本体デバイスや相手のデバイス(Peers)情報は、intentで通知されます。独自のブロードキャストレシーバを用意することで、それらイベント(intent)について簡単に扱うことができます。

WifiP2pManagerで定義されているアクションと対応する処理

アクション名処理
WIFI_P2P_STATE_CHANGED_ACTIONWiFi Directの有効/無効状態が通知される。機能制限やユーザへの通知に利用
WIFI_P2P_PEERS_CHANGED_ACTIONWifiP2pManagerクラスのrequestPeersメソッドをつかってデバイス一覧WifiP2pDeviceListを取得。個々のデバイス情報はWifiP2pDevice
WIFI_P2P_CONNECTION_CHANGED_ACTIONWifiP2pManagerクラスのrequestConnectionInfoメソッドを使って接続状態WiFiP2pInfoを取得する
WIFI_P2P_THIS_DEVICE_CHANGED_ACTIONintentから自分自身のデバイス状態の変更通知WifiP2pDeviceを取り出して、接続状態にあわせた処理を行う

Reference:
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html

WiFi Directの接続/切断処理のサンプルコードは続きから
Read more >>

WiFi DirectでP2P通信を行う(1)

10月 30, 2011   //   by @mhidaka   //   デバイス  //  No Comments

WiFi DirectとはWiFi対応機器同士を直接接続するP2P通信方式です。
P2P通信の名前の通り、アクセスポイントを必要としないことから、手軽に無線LANを使って通信できるAndorid 4.0の注目の新機能です。
(無線LANでは以前から1対1通信を行うアドホックモードが存在していましたが、WiFi Directではさらに発展させた1対複数通信が可能です)

Android SDK 4.0にはWiFi DirectのSampleが付属しています。

android-sdk-windows\samples\android-14\WiFiDirectDemo

WiFiDirectDemoは複雑ですが、WiFi Directを理解するにはとてもよい題材です。今回はこのSampleを例にWiFi Directについて解説します。
WiFiDirectDemo http://developer.android.com/resources/samples/WiFiDirectDemo/index.html

注意:Android SDKのAPI ReferenceではWiFi Directを”Wi-Fi p2p”、WiFi Direct対応デバイスを”Peers”(ピア)とP2Pで用いる名称で表記しています。記事中でも気をつけて触れていますが随時読み替えてください。
(まだ実機での動作確認ができていませんので記事の記載に誤りがあった場合、随時アップデートします!)

WiFi Direct機能はandroid.net.wifi.p2pパッケージとして新たに追加されました。
主なポイントは以下の通りです

WiFi Directを使うためには

クラス等説明
WiFi Direct用のBroadcastReceiverWiFi Directの状態変化はブロードキャストされるため、BroadcastReceiverで受け取ること
WifiP2pManagerWiFi Direct対応デバイス(P2Pデバイス)の情報、接続状態を管理するクラス
WifiP2pInfo接続状態が格納されている
WifiP2pDeviceデバイス情報が格納されている、接続先情報など。

今回は、ブロードキャストレシーバとWiFi Directに関わるintentのハンドリング方法について紹介します。
WiFi Directの接続方法や解除、キャンセルの仕方を(2)にて取り扱います。

では、さっそくブロードキャストレシーバの登録方法から確認してみましょう。
非常に長い記事になってしまっていますので、各センテンスの最後に大事なポイントをまとめています。
Reference:
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html

Read more >>

カメラプレビューをキャプチャする

10月 17, 2011   //   by @mhidaka   //   デバイス  //  No Comments

Androidのカメラ機能を活用し、リアルタイムに画像処理をしてみましょう。
Android SDKでカメラを扱うにはandroid.hardware.cameraパッケージを利用します。cameraパッケージではカメラからの入力映像をそのまま簡単に画面に表示する「プレビュー」機能があります。
画像を編集する前段階として、プレビュー画面に表示したカメラ画像をキャプチャする方法を紹介します。

便利なことにAndroid SDKのAPI Demos内でカメラ機能について纏まっていますので、このGraphics/CameraPreview.javaをベースに改造を加えていきましょう。サンプルではプレビューしている画像データをキャプチャ、保存する機能を追加します。

Cameraクラスの主なメソッドと関連クラス

メソッド名説明
getNumberOfCameras()Android端末のカメラデバイス数を取得する
getCameraInfo(i, camerainfo)指定デバイスNoのCameraInfoを取得する。
open()カメラデバイスリソースの取得
release()カメラデバイスリソースの解放
setPreviewCallback()プレビュー完了時のコールバックメソッドの登録
Camera.PreviewCallbackプレビュー完了時に呼び出されるコールバックメソッド
Camera.PreviewCallback.onPreviewFrame(byte[] data, Camera camera)プレビュー更新時のフレーム情報
startPreview()プレビューの開始
stopPreview()プレビューの終了

複数のカメラを使う http://techbooster.jpn.org/andriod/device/2358/
カメラの使用方法(2) http://techbooster.jpn.org/andriod/device/362/

Read more >>

Bluetoothで通信を行う(3)

5月 20, 2011   //   by UpDown-G   //   デバイス  //  No Comments

Bluetoothで通信を行う(2)では、

  • 接続履歴のあるデバイス情報を取得
  • 接続したことのないデバイスを検出
  • 上記二つをリストに並べる

というところまでを解説しました。

今回は、リストに表示されたデバイスから一台を選択し、2台の端末間でデータ交換を行うところまでを解説します。
サンプルソースの動作としては、Bluetoothの接続が完了した際に、お互いの電話番号を交換し、表示用画面に遷移して表示するようにします。

※上サンプル画像では、個人情報保護のため、あえてEditTextに表示し、データ交換後に適当な電話番号に編集しておりますのであしからず。

2台の端末を用いて、Bluetoothの接続、およびデータ交換をする際のポイントは次の3つです

  1. 一台をサーバー、もう一台をクライアントとして処理を行う
  2. 接続待ちを別スレッドで行う
  3. 取得したソケットからインプットアウトプットストリームを取得してデータ交換を行う

以上の3つです。

上記1.については、2台の端末をサーバーとして待機させ、接続要求を投げた方をクライアントとして扱うという方法がありますので、今回はそちらを紹介します。

※なお、電話番号の取得方法についてはここでは詳しく解説しません。サンプルソースを参考にして頂くか、以下記事を参考にして下さい。

それでは続きをどうぞ、、、

Read more >>

Bluetoothで通信を行う(2)

5月 9, 2011   //   by UpDown-G   //   デバイス  //  No Comments

Bluetoothで通信を行う(1)では、

  1. デバイスがBluetoothに対応していることを確認
  2. 対応していた場合にはBluetoothのON/OFFを判断
  3. OFFだった場合にはONにするようユーザーに促す

というところまで、順番に解説しました。

今回は、その次の段階として、Bluetoothに接続可能なデバイスを検出し、リストにして並べるところまでを解説したいと思います。

デバイス検出時のポイントとしては、

  • 接続履歴のあるデバイス情報を取得する場合
  • 接続したことのないデバイスを検出する場合

の2パターンが存在することです。

今回のサンプルコードでは、DeviceListActivityを新しく作成し、前回作成・解説したBlueToothSampleのActivityから、Bluetoothの設定がONになるタイミングで画面遷移させます。

画面遷移と同時に、接続履歴のあるデバイス情報を取得してリストに表示させ、オプションメニューにて、接続可能なデバイスを検出し、別途リストに表示させるようにします。

それでは続きをどうぞ、、、

Read more >>

位置測位機能の状態を取得する

5月 1, 2011   //   by kseto   //   デバイス  //  No Comments

「PhoneStateListenerで回線の接続状況の変化を取得する」「NetworkInfoを使って、通信接続が可能状態か知る」では3G/Wifiのネットワーク通信の接続状態を確認する方法を紹介しました。
同じようにGPSなどの位置測位機能の設定状態を確認したい場合があります。
※AndroidではGPSやWiFiを利用して位置情報を取得することができます。

これら位置測位機能の状態はandroid.provider.Settings.Secureクラスを利用することで取得が可能です。

今回は位置測位機能の状態を取得する方法について説明したいと思います。

getStringメソッドとLOCATION_PROVIDERS_ALLOWEDパラメータ

GPSの状態の取得にはandroid.provider.Settings.Secure#getStringメソッドを使用します。

String getString (ContentResolver resolver, String name)

引数にはContentResolverと取得したいパラメータ名を指定します。
パラメータ名にはLOCATION_PROVIDERS_ALLOWEDを指定することで位置測位機能の設定情報を取得することができます。

具体的には以下のように使用します。

String gpsStatus = android.provider.Settings.Secure
		.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);

上記コードを実行すると以下のような結果が得られます。

network,gps

networkはWiFi経由での位置測位、gpsはGPS経由での位置測位が有効になっていることを示しています。
このように有効になっている位置測位機能がカンマ区切りで表現されます。

それでは続きからサンプルコードを紹介します。

Read more >>

Bluetoothで通信を行う(1)

4月 30, 2011   //   by UpDown-G   //   アプリケーション, デバイス  //  No Comments

AndroidではBluetoothを利用して通信を行うことが可能です。
Bluetoothを利用して端末間で通信を行うまでには、いくつかの手順を踏む必要があります。
今回から3回に分けて、端末間で簡単なデータ交換ができるところまで説明していきたいと思います。

今回は、アプリケーションの起動〜Bluetoothの設定をONにするまでを説明します。
ポイントは、デバイスのBluetoothAdapterを取得してBluetoothのシステム情報を引き出し、Intentを用いて端末Bluetoothの設定をONにするようユーザーに促す画面を表示し、onActivityResult()にてその結果を受け取ります。

でも一部触れていますが、そちらも参考にしながら、おさらいも兼ねて一から説明したいと思います。
それでは続きをどうぞ。

Read more >>

ハードウェアキーを取得する

4月 27, 2011   //   by @mhidaka   //   デバイス, ユーザインターフェース  //  No Comments

今回は、Androidで定義されているキーの一覧を紹介します。Androidのハードウェアキーは、おおむね4つ、メニューキー、検索キー、戻るキー(Backキー)、ホームキー(HOMEキー)が有名です。
Android端末でのハードウェアキーの並びにガイドラインが無く自由なことから、キー配置はプラットフォームの「分断」の象徴として揶揄されています。
しかし、キーの種類に目を向けると(KeyEventで定義されているものは)、Androidの「自由」を象徴するように沢山の種類があります。

KeyEventで定義されているKeyCodeマクロは大まかに以下の6つに分類できます。

  • 専用キー(MENU/Search/Back/Homeなど)
  • ゲームパッド用ボタン
  • QWERTYキー
  • 十字キー
  • GoogleTVのようなテレビリモコン用のハードウェアキー
  • 音楽/動画の再生用のメディア制御ハードウェアキー

ゲームパッド用ボタンは、ゲーム用途を意識したAndroid端末(XperiaPlayなど)を考えており、今後のトレンドに備えたKeyCodeといえます。
参考:http://developer.android.com/reference/android/view/KeyEvent.html
※一般的なQWERTYキーについては説明を省略しています。上記KeyEventを参照してください。

サンプルコード:キーの取得方法

基本となるサンプルコードは以下の通りです。

    @Override
    public boolean dispatchKeyEvent(KeyEvent e) {

       // DOWNとUPが取得できるのでログの2重表示防止のためif
       if (e.getAction() == KeyEvent.ACTION_DOWN) {
    	   //キーコード表示
    	   Log.d("KeyCode","KeyCode:"+ e.getKeyCode());
       }

       return super.dispatchKeyEvent(e);
    }

Activity#dispatchKeyEventでキーのPushとReleaseを取得できます。

KeyEvent#getKeyCodeメソッドで取得したキーコードはKeyEvent.KEYCODE_BACKなど、KeyEventのマクロ定義と比較して判定してください。
TechBoosterではキー入力に関して、以下のような様々なテクニックを紹介しています。あわせてどうぞ。

 

代表的なハードウェアキー

代表的なハードウェアキーの一覧です。あまり使われていないキー(ヘッドセット等)も定義されています。またHOMEキーなど一部のハードウェアキーはアプリケーションで取得することができません。

ハードウェアキーのマクロ定義 概要
KEYCODE_APP_SWITCH アプリケーションの切り替え
KEYCODE_BACK バックキー
KEYCODE_CALL 通話キー
KEYCODE_CAMERA カメラ起動
KEYCODE_ENDCALL 終話キー
KEYCODE_ENVELOPE メール起動特殊キー
KEYCODE_EXPLORER ファイラ起動用特殊キー
KEYCODE_FOCUS カメラフォーカスキー
KEYCODE_HEADSETHOOK ヘッドセット割込キー
KEYCODE_HOME ホームキー
KEYCODE_MENU メニューキー
KEYCODE_POWER 電源キー
KEYCODE_SEARCH 検索キー
KEYCODE_SETTINGS 設定キー
KEYCODE_SWITCH_CHARSET 文字入力モード切替
KEYCODE_VOLUME_DOWN ボリュームDOWN
KEYCODE_VOLUME_MUTE ミュート
KEYCODE_VOLUME_UP ボリュームUP

以下、ゲームパッド、十字キー、メディア制御キー、テンキー、TVリモートなど特殊なキーコード一覧です。
Read more >>

ページ:1234»

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です