́●)昔々あるところに、新しいアプリを作るにあたり折角の機会なのでtargetSdkVersionを28にしてやれと思った人がいました。今まではtargetSdkVersionといえば27であったにもかかわらずです。これが全ての困難の始まりでした(。)いつも作り慣れたUVC機器アクセスのアプリです。Studioで新規プロジェクトを作成し依存するライブラリを追加し...テスト実行(^o^)/いつもどおりであればサクサクと数時間と掛からずにUVC機器へアクセスできるようになるはずでした。おかしいです、USB機器アクセスのパーミッションを取得できません。いえ、正確にはアプリにはパーミッション付与されているようなのですが、いざアプリがUVC機器へアクセスしようとするとパーミッションが付与されていないのです。作成中のアプリをインストールしたAndroid端末へUVC機器を接続すると、「USBデバイス用アプリ選択」のSnackバー/ダイアログが表示されます。ここで該アプリを選択して「1回のみ」または「常時」ボタンを押すとAndroid側からUSB機器アクセスのパーミッションが付与されてアプリが起動するはずです。Android側からUSB機器アクセスのパーミッションを付与されたときにはACTION_USB_DEVICE_ATTACHEDアクションとともにIntent#getFlagの値のビット24ビット25がONになったIntentが飛んできます。ここまでもいつもと同じです。いざUVC機器へアクセスしようとするとパーミッションが付与されていません。仕方がないのでアプリ側からUsbManager#requestPermissionを呼び出してパーミッション要求するのですが(これはヘルパークラス内で自動的におこなっています)、パーミッション要求ダイアログが表示されることなく直ぐにBroadcastReceiverへIntentが飛んできます。false)は何度試してもfalseしか返ってこないのです。́・ω・`)このアプリでは、USB機器アクセルのパーマネントパーミッションを保持できるように、AndroidManifest.xmlでandroid.hardware.usb.action.USB_DEVICE_ATTACHEDアクションを受け取れるようにintent-filterを設定してあります。「USBデバイス用アプリ選択」で「常時」選択してから、端末の設定画面からアプリの設定画面を開き「デフォルトで開く」設定を確認すると「一部デフォルトで設定」になっています。これもいつもと同じです。アプリに対してはUSB機器アクセスのパーマネントパーミッションが付与されているとということです。関わらず、アプリ側からアクセスしようとするとパーミッションが付与されていないのです。困りました、いつもと全く同じヘルパーライブラリ/クラスを使っているにも関わらずです。この時点では主要部分は既存アプリからコピペしただけであるにも関わらずです。同じヘルパークラスを使っている既存のアプリを実行すると、パーミッション要求ダイアログが表示された後UVC機器から正常に映像を取得することでできます。気を取り直して別のテスト端末で動かすことにしてみます。......えっ!あれっ!!にゃ~んと、正常に動きます、お昼寝前にはあれほど取得できなかったUSB機器アクセスのパーミッションもUVC機器アクセスも正常に動きます。Plusで試してみると...やっぱり動きません(。)なんでやねんなぁ〜〜〜〜💫AndroidManifest.xmlも実装しているコードはほぼ等価、も使っているヘルパーライブラリ/クラスも同じで大きな違いはありません。なんででしょう?💫logCatにもめぼしい情報は出力されていません。OS自体にUVC機器アクセスの機能が導入されました。targetSdkVersionが27以下の場合にはその機能は無効なようなのですが(以前試したのですがどうしても使えなかった)、どうやらtargetSdkVersionを28にすると挙動がキョドるようなのです。Plus(Android9)でも正常に動作します。調べてみると、Android9端末でtargetSdkVersion=28のアプリからUVC機器へアクセスするにはカメラアクセスのパーミッションが必要なようです。AndroidManifest.xmlに下記の記述をした上で動的パーミッション取得の処理が必要というわけです。/>まとめるとAndroid9でUVC機器へアクセスするアプリでは次の実装が必要になります。targetSdkVersionが27以下の場合には、従来どおりUsbManagerを使ったUSB機器アクセスのパーミッション要求が必要targetSdkVersion=28(以降)の場合には、従来どおりのUsbManagerを使ったUSB機器アクセスのパーミッション要求の前に、CAMERAアクセスの動的パーミッション要求が必要。Android9未満の端末であればCAMERAアクセスのパーミッション処理は不要。めんどくさい...めんどくさみしかない(。)2回もパーミッションを要求しないといけないなんて(。APIでアクセスできると思われる)を使ってUVC機器を使うというのであればCAMERAアクセスのパーミッションを必要とするのは納得いきます。reserved.%d人のブロガーが「いいね」をつけました。このサイトでは利便性の向上の為に、機能的なクッキーと外部スクリプトを使用しています。同意しますプライバシー設定広告プライバシー設定このサイトでは利便性の向上の為に、機能的なクッキーと外部スクリプトを使用しています。どのクッキーとスクリプトが使用され、どのように訪問に影響を与えるかを左に示します。設定はいつでも変更できます。あなたの選択はサイトへの訪問に悪い影響を与えません。これらの設定は、現在使用しているブラウザとデバイスにのみ適用されます。広告このサイトでは、サイトや広告を改善するためにCookieを利用することがあります。本サイトを利用することでCookieの仕様に同意するものとします。