質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

解決済

1回答

2173閲覧

複数のActivityやFragmentでBluetoothを使う方法

ZKyb

総合スコア2

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2021/09/25 10:43

編集2021/09/25 10:47

背景

Bluetoothを介して、マイコンとAndroidで通信をするアプリを製作しようとしています。
下記のアドレス等を参考にして、Bluetoothの送受信はできるようになりました。
製作したプログラムはMainActivityのみでBLEのスキャン、接続、送受信をするものです。

(BLE参考リンク)https://www.hiramine.com/programming/blecommunicator/index.html

#困っていること
作りたいプログラムはMainActivity上に複数のFragmentを配置して、それをViewPager2でスクロールして使用することをイメージしています。
すべてのFragmentでBLEは使用します。送受信するデータは文字のみです。
MainActivityでBLEに接続したのち、各Fragmentでデータを送受信したりするところで躓いています。
調べてみたところではServiceでBLE接続をして、それをブロードキャストするのかな?(←良く分かっていません)などと思ったりしていますが、
イマイチそれで良いのかわかっていません。
BLE接続してそれを色々なActivityやFragmentで使用したいと思った時、どのような構成にするのが一般的でしょうか?
当方、プログラミングにそれほど詳しくありません。簡単な方法があると助かります。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Model に BLE アクセサを実装して、各フラグメントから(個々か共通かの) ViewModel を経由して Model を利用するという感じでしょうか。
Service が必要かどうかは、アプリが動いていない時や裏にある時に BLE が必要かどうかかと思います。

投稿2021/09/25 13:48

jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ZKyb

2021/09/26 02:40

今回もアドバイス頂きありがとうございます。 アプリが裏にある時にBLEは必要ないので、Serviceは必要なさそうです。 すみません、調べてみたのですがイマイチ理解できなく、ご教示頂けると幸いです。 ModelとはMVVMと呼ばれるような手法のことでしょうか。 概念を説明する記事は見つけられたので読んでみたのですが、具体例に落とし込むんだ時にModelの部分がどうなっているのかイメージが分かりませんでした。 View: UIの部分。今回はMainActivityに配置した複数のFragment。 ViewModel: ViewModelクラスがあるようなのでそれを使う。まだ良く分かってないですが、データの保持とかするっぽい。 Model: 演算したりBLEの通信をする部分。今回はMainActivityに演算したりBLEの通信をする部分を記述して、それがModelにあたる??それとも別のActivityにする? まだ、ほぼほぼ理解できてないですが、Modelの具体例について教えて頂けると幸いです。
jimbe

2021/09/26 07:01

パターンの完全に正しい定義というのは私は分かりませんので、イメージとして…とご解釈ください。 View - ViewModel - Model という形で View は表示する部分、Model はアプリとしてのデータ保持・処理を担当し、ViewModel は View と Model を繋ぐ役割をします。 Excel で言えば、データを纏めた表(個々のデータの他、合計・平均等計算結果も含まれます) のシートが Model で、それを円グラフや棒グラフ等で表示するシートが View ですね。 ViewModel はパターンとしては単にデータの受け渡しだけに見えますが、android におきましては fragment の構造的な特性上重要な部分があります。 fragment はシステムによって消されたり再生成されたりしますので、他のオブジェクトとデータのやりとりを行う際には、常に fragment 側から処理を開始するようにしないと危険です。(Model から fragment にデータを渡そうしてもその fragment が居ない場合がある等です。) ですので、Model は( fragment の状態に関係無く随時)データを ViewModel に入れ、fragment は必要に応じて ViewModel に接続して LiveData 経由でデータを得て表示する…という形になります。 Model および ViewModel のライフサイクルをベースとなる Activity に合わせることで、お互いは存在することが保証出来ます。 じゃあ Model と ViewModel を分ける必要があるのか?といえば、構造的には同一でも良いかもしれませんが、例えば Aフラグメントは Model の持つ A 関係のデータを表示し、 B フラグメントは Model の持つ B 関係のデータを表示、 C フラグメントは…とそれぞれ View の内容が結構異なるのであれば、各フラグメント毎に専用の ViewModel を作ったほうが、分かり易い(管理がし易い)のでは無いでしょうか。 Model が何なのかというと、単なるクラス(オブジェクト)です。 この場合は通信に関するメソッドおよびその結果の保持(GattCallback の結果も持っている感じでしょうか)、およびその結果が出た(更新された)ことを ViewModel に通知するロジックを持つことになると思います。 Model を Activity と別に考えますのは、Activity はアプリの土台であり、その上で各種オブジェクトを扱ってアプリを構成するという考え方からです。ですので、Model の規模が非常に小さい(ArrayList 1つだけとか) ならいっそ Activity が Model の役割を兼用したほうがコードが減って良いかもしれませんが、あえてハッキリと Activity を裏方に回して存在を無視する(ようにする)ということもあります。
ZKyb

2021/09/26 12:45

詳細なご説明ありがとうございます。 なんとなくイメージができてきた気がします。 入門用のAndroidの書籍にはViewModelについては記載がなく、Android DevelopersやQiita等の記事は少し難しかったので、かみ砕いてご説明して頂き大変助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問