BluetoothやNFCなどのネイティブ機能を利用したMonacaアプリを開発する場合、まずはじめに確認しなければならないのが、端末側が対象の機能をサポートしているかどうかです。
開発中はつい自分の環境がデファクトだと思ってしまいがちですが、端末によってはネイティブ機能そのものが利用できないといったこともありえます。
そうした際にエラーハンドリングを行うためには、まずその機能が存在しているのか、使えるのかと言った診断を行われなければなりません。

そのためのCordovaプラグインが Cordova diagnostic plugin になります。

プラグインのインストール方法

Monaca IDEの「Cordovaプラグインの管理」画面から cordova.plugins.diagnostic をインポートしてください。

なお、今回の検証環境は以下の通りです。

  • Cordovaバージョン:7.1.0
  • Cordovaプラグインバージョン:4.0.3
  • 検証端末:Galaxy S6 (Android 7.0) / iPhone 7 Plus (iOS 11.4.1)

上記の検証環境以外では、本記事に掲載されている通りに動作しない可能性があります。あらかじめご了承ください。

診断できる機能

Cordova diagnostic plugin で診断できる機能は以下の通りです。

  • 位置情報
  • Bluetooth
  • WiFi
  • カメラ
  • 通知
  • マイク
  • アドレス帳
  • カレンダー
  • リマインダー(iOSのみ)
  • モーション(iOSのみ)
  • NFC(Androidのみ)
  • 外部ストレージ(Androidのみ)

ただし機能によってはiOSでサポートされていないものもあります。

基本的な使い方

対象の機能が有効かどうかを調べるときは、ほとんどの場合以下のような名前のメソッドを使います。

is{機能名}Enabled()

位置情報の場合は次のようになります。

また、機能が有効であってもパーミッション設定でアプリに対して対象機能へのアクセスが許可されていない場合もあります。
そういったときは以下のような名前のメソッドで利用可能かどうかを調べます。

is{機能名}Available()

位置情報の場合は次のようになります。

一つ目の引数が成功時のコールバック、二つ目が失敗時のコールバックになります。
有効かどうか、利用可能かどうかをチェックする程度であればどの機能でもメソッドの使い方はほぼ同じです。

Bluetooth

iOSの場合、Bluetoothに関する診断には多くの制限があります。Bluetoothのステータス(有効/無効)はiOSでも取得できます。

BluetoothとBLEがそれぞれサポートされているかどうかを診断するメソッドはAndroidでしか使えません。

基本的には診断をするのみなのですが、一部の機能については設定もできます。Bluetoothのステータス変更は cordova.plugins.diagnostic.setBluetoothState で可能です。

iOSの場合、Bluetoothを使う前に確認ダイアログを出します。OKすれば、ステータス変更を受け取れるようになります。

WiFi

WiFiの診断方法もBluetoothとほとんど同じです。Androidであれば設定を変更できます。iOSでは状態を取得することのみ可能で、状態変更時の通知機能も利用できません。

カメラ

カメラの場合は、端末に搭載されているかどうかをチェックする機能があります。(一部のAndroidデバイスにはカメラがついていないケースがあるため)

その他のメソッドの種類はBluetoothと変わりません。iOSの場合はカメラロールにアクセスするための権限を別途指定できます。

通知

通知に関するメソッドはほぼiOS向けのものになります。

マイク/アドレス帳/カレンダー

マイク/アドレス帳/カレンダーはiOS/Androidで共通です。アクセス許可されているかどうかの診断、ステータスの取得、そしてアクセス許可を求めるという用途の3つのメソッドが用意されています。

マイク

アドレス帳

カレンダー

リマインダー

リマインダーはiOS向けのみ提供されています。

モーション

徒歩などのモーションデータを診断します。これもiOSのみです。他の機能に比べると若干使い方が複雑です。

NFC

NFCはAndroidでのみ使える機能になります。NFCもBluetoothのようにステータスの変更を受け取れるようになっています。

外部ストレージ

外部ストレージもAndroidでのみ使える機能になります。なお、筆者の端末Galaxy S6ではステータスは取得できましたが、ストレージの詳細は取得できませんでした。


Cordova diagnostic pluginは、対象デバイスでどの機能が使えるのかを診断するときに便利です。診断をするだけで実際にデータを取得できる訳ではありませんが、デバイスの状態に応じた細やかな制御を行う場合に役立つでしょう。インタフェースがほぼ共通というのも使い勝手が良いです。

今回のサンプルコードは GitHub で公開しています。また、お使いのMonacaアカウントに直接インポートするURLは こちら です。実装時の参考にしてください。

今回ご紹介したCordovaプラグインは、サードパーティ製であるためアプリストア版のMonacaデバッガーでは動作しません。動作検証の際にはProプラン以上で利用可能なカスタムビルドデバッガーをご利用ください。