#Androidアプリにデータ共有機能を乗っけたいという話
今回は「初心者僕「KotlinでAndroidプログラミングをしたい」2.5」で少しだけ触れたAndroid間のデータ共有機能を付けたいという話の続きです。僕が今作っているTRPGをAndroidで管理するアプリ(世の中に溢れてるけど)の機能の一つに共有できるホワイトボードの機能を付けようと考えています。前回はWiFi Directを使おうということでしたが、紹介しているサイトが古いものが多かったので、比較的最近でも使われてそうなNearby Connections APIを使っていきたいと思います(内部的にはWiFi Directも使っていますが)。個人的な考えですが、初心者が技術を導入する時は流行に乗るのが一番手っ取り早いので。
#Nearby Connections APIって何よ?
Nearby Connections APIはネットワークを必要とせず、Android端末間でデータ共有を行うための機能です。通信には、Bluetooth, BLE, Wifiなど複数の方法を切り替えて使用することで、それぞれの長所を活かしつつ短所を隠蔽できます。また、Android端末やAndroid OSによる通信方法の違いを意識せず開発できることも特徴です。
アプリ使用者はAdvertisersとDiscoverersに分かれます。Advertisersは自身が接続可能であることを伝え、Discoverersはそれに対して接続の要求をします。接続は両者の合意が成されたときに確立します。
#準備
まずはGoogle Play Services SDKを使えるようにしましょう。
[File]→[Settings]→[Android SDK]→[SDK Tools]からGoogle Play Servicesにチェックを入れます。また、[Support Repository]からGoogle Repositoryにもチェックします。チェックができたらApplyを押してDownloadを始めましょう。
次にbuild.gradle(Module: app)を弄ります。dependenciesの部分に
implementation 'com.google.android.gms:play-services-nearby:{latest_version}'
を追加します。
次にパーミッションの変更をします。AndroidManifest.xmlに
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
を追加します。これらのパーミッションは扱う端末間の接続トポロジー(Strategies)によって必要なものが異なるため、必要なものを取捨選択しましょう。
#実装したいんだけど......
今回もサンプルコードみたいなものを挙げようかと思っていたのですが、Android端末が2つもないのでテストできてません。さすがにテストもしないで挙げるわけにもいかないので了承ください。公式のチュートリアルに部分コードがあるのでそちらを参照してくれれば幸いです。
#次回
今回は投げやりな記事になって申し訳ないです。次回は初心者用の記事になるはずなのでサンプルコードも挙げれるはずです。内容はまったく考えてないですが。