-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature/android api level31 #266
Feature/android api level31 #266
Conversation
Release v1.5.0
Fix documents
Adjust readme
release 1.5.1
const string androidBluetoothPermission = "android.permission.BLUETOOTH"; | ||
const string androidBluetoothAdminPermission = "android.permission.BLUETOOTH_ADMIN"; | ||
const string androidBluetoothAdvertisePermission = "android.permission.BLUETOOTH_ADVERTISE"; | ||
const string androidBluetoothScanPermission = "android.permission.BLUETOOTH_SCAN"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
API Level 31 Bluetooth permissions
https://developer.android.com/about/versions/12/features/bluetooth-permissions
にあるように権限の細分化が必要。しかしUnity2021.3.0f1はこれらの新しい権限のリクエストが失敗する点に注意。
@@ -169,7 +169,7 @@ public BleDeviceObj(BluetoothDevice device, Context cxt) { | |||
this.charastricsKeyHashMap = new HashMap<CharastricsKey,BluetoothGattCharacteristic>(); | |||
this.pubCharastricsKeyHashMap = new HashMap<CharastricsKey,BluetoothGattCharacteristic>(); | |||
this.charastricsKeys = new ArrayList<CharastricsKey>(32); | |||
device.connectGatt(cxt,true,this); | |||
device.connectGatt(cxt,true,this,BluetoothDevice.TRANSPORT_LE); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
明示的にLEを指定しないと問題が起きそうです。
@neon-izm さん
ブルートゥースだけのためなので、ACCESS_COARSE_LOCATIONでも動けるならそれで良いかと思います。
とてもわかりやすい解説で助かりました。こちらに関しては運営の判断が必要なので、また来週検討させてください。 |
@MrkKSen sanありがとうございます。 良い点
悪い点
という感じです。 |
@neon-izm さん Unityのバージョンアップはしないtoio SDK for Unity は原則 Unity のLTSバージョンに基づきたいと考えておりますので、そろそろ2022LTSが出る時期なので、バージョンアップはその時にしたいと思っております。 手元にある Android 11 (API 30) のスマホで試した結果
なので、manifest は以下なのが良いかもしれません。 <!--(以上略)-->
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--(以下略)--> Android 12で動けるかはわからないですが、もし問題なければこれで対応して頂きたいと考えております。 その他ちなみに紹介頂いたライブラリ https://github.com/yasirkula/UnityAndroidRuntimePermissions ですが、BlePermissionRequest.cs の権限取得部を置き換えるとして、なんの違いがあるかが理解できていません、ご教示いただけるとありがたいです! |
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" | ||
android:minSdkVersion="31"/> | ||
<!-- application must have ble hardware --> | ||
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BLE非対応機器にインストールできないように指定
@MrkKSen san遅れましたが追加のコミットをしました。 FBを受けての変更点AndroidManifestの権限を見直しました。おそらくこれでAndroid8~13までの権限が網羅できたと思います。 AndroidRuntimePermission導入は無くても良いかなくても大丈夫そうです! Unityバージョンアップについて了解です。LTSが出たらまた考えていただければと思います。 残件について現時点のPRでおおよそやりたいことは実現できそうですが、引き続き現在のGooglePlay Storeへの提出にはTarget APIが31以上という制約が遺っています。 |
@neon-izm さま ドキュメント追記の件承知しました。 一つの疑問がありますが、以下の部分で minSdkVersion="31" が設定されていますが、それでも API 30 でビルドする場合は、 <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:minSdkVersion="31"
android:usesPermissionFlags="neverForLocation" /> usesPermissionFlags に関して、一つの manifest ファイルで後方互換性を保つのは無理でしょうか? |
@MrkKSen san FBありがとうございます。 そもそもこのPRがAndroid のTarget API>=31での動作を行うためのものなのでTarget API=30でエラーが起きるのは仕方ないのかな、という気はします(存在しない権限なので) おっしゃるとおり後方互換性をうまく保つ方法は残念ながら無いと思います。 現実的には以下2個の対応が有り得ると思っています。どうしましょうね… このPRはマージせず、toio SDKはTarget API=30を維持するメンテコスト的にはこれが楽です。 このPRをマージして、Target API=31にする開発者はGoogle Play Storeへの公開も行えるし、将来のアップデートコストが低いです。 欠点は 一時的に Unity2021のバージョンに同梱されているAndroid SDKではビルド出来なくなってドキュメントでのフォローが必要です。(Android SDKを追加でインストールしてUnity Editorで指定する、という旨の記載) |
@neon-izm さま とすると、このPRをマージすると、toio SDK for Unity の対応 Unityバージョンが 2021 なのに、デフォルトの状態では Unity 2021 で動けないという状況になるので、合理的ではないかと思いました。 なのでこのPRを main に取り入れるのは Unity 2022 LTS にアップグレードしてからにして、当面の対応としては、一旦専用のブランチにマージし、main のドキュメントで「google playに配布したい方、API 30 を使いたいかたはこのブランチを参考にしてください」みたいに追記する形を考えておりますが、いかがでしょうか? |
良いと思います。ではこのPRはそのまま放置というか、2022LTSへのアップデートの際にマージよろしくお願いします&readmeへの追記お願いします |
@MrkKSen sanそろそろUnity2022LTSも出たので、上記PRの件含めて検討おねがいします! |
@neon-izm さん |
solve #265
議論ポイント
以下2点は悩みどころです。