周辺デバイスからデータを受信
周辺デバイスからデータを受信する方法を紹介します。
サービスアプリへの通知
NotifyNotificationクラスにobserver(NotifyNotification.NotificationInterface)を設定することで周辺デバイスからの通知を受けることができます。
受信したデータは以下の名称でローカルデータとしてSharedPreferencesに格納されます。
- 受信データ:NotificationInformation
import com.nttdocomo.android.sdaiflib.NotifyNotification; import com.nttdocomo.android.sdaiflib.Define; public class LinkingService extends Service { private NotifyNotification mNotifyNotification; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); mMyNotificationInterface = new MyNotificationInterface(); mNotifyNotification = new NotifyNotification(this, mMyNotificationInterface); } public void onDestroy() { super.onCreate(); mNotifyNotification.release(); } private void sendNotification(String title, String text){ NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(android.R.drawable.sym_def_app_icon) .setContentTitle(title) .setContentText(text); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(0, notificationBuilder.build()); } // 周辺デバイスからの通知を受信する class MyNotificationInterface implements NotifyNotification.NotificationInterface { @Override public void onNotify() { SharedPreferences preference = getSharedPreferences(Define.NotificationInfo, Context.MODE_PRIVATE); String appName = preference.getString("APP_NAME", ""); sendNotification("通知", "[" + appName +"]" + “から通知がありました”); } } }
距離通知
NotifyRangeクラスにobserver(NotifyRange.MyRangeInterface)を設定することで距離の変化通知を受けることが可能になります。
受信したデータは以下の名称でローカルデータとしてSharedPreferencesに格納されます。
- 受信データ:RangeInformation
距離通知を受信する場合は、サービスアプリのマニフェストファイルに、距離通知対応の宣言を記載してください。
<application ~中略~ <meta-data android:name="com.nttdocomo.android.smartdeviceagent.feature.notify_distance" android:value="true" /> ~中略~ </application>
import com.nttdocomo.android.sdaiflib.NotifyRange; public class MainActivity extends AppCompatActivity { private NotifyRange mNotifyRange; private MyRangeInterface mMyRangeInterface; @Override protected void onCreate(Bundle savedInstanceState) { ~中略~ mMyRangeInterface = new MyRangeInterface(); mNotifyRange = new NotifyRange(this, mMyRangeInterface); } @Override protected void onDestroy() { super.onDestroy(); mNotifyRange.release(); } // 距離通知を受信する class MyRangeInterface implements NotifyRange.RangeInterface { @Override public void onRangeChange() { SharedPreferences preference = getSharedPreferences(Define.RangeInfo, Context.MODE_PRIVATE); int rangeSetting = preference.getInt("RANGE_SETTING", -1); String address = preference.getString("BD_ADDRESS", ""); // 3段階で通知される switch (rangeSetting) { case 1: { Log.d(TAG, address + " : との距離は" + "近い"); break; } case 2: { Log.d(TAG, address + " : との距離は" + "やや近い"); break; } case 3: { Log.d(TAG, address + " : との距離は" + "遠い"); break; } } } } }
さいごに
本記事ではLinkingの概要と使用方法を紹介しました。いかがでしたでしょうか。
このようにLinkingアプリを利用することで、周辺デバイスとサービスアプリの連携がより簡単になります。サービスアプリが増えることでユーザーはもっと身近にIoTを体験することができるでしょう。
また、Linkingでは新しい周辺デバイスやサービスアプリを作っていく仲間を求めています。ハードウェア開発者の方も、ソフトウェア開発者の方も、ユーザーコミュニティ「Project Linking」に参加してみませんか。
Project Linkingに関心を持たれた方は、以下のサイトの「Contact Us」よりお問い合わせください。