2023/01/05

Android の権限ダイアログで2度「許可しない」が選択されたことを検知する方法

Android 6.0 (API Level 23) 以降、マイクの使用許可などプライバシーに関わるような権限はアプリの中から個別に許可を求めなければいけなくなりました。具体的には以下のようなコードを実行すると上記のようなダイアログが表示されます`AndroidManifest.xml` に `uses-permission` の記述も必要。(`permissionLauncher` の実装は後半を参照) ```kotlin val granted = ContextCompat.checkSelfPermission( requireContext(), Manifest.permission.RECORD_AUDIO ) if (granted != PackageManager.PERMISSION_GRANTED) { permissionLauncher.launch(Manifest.permission.RECORD_AUDIO) } ``` 以前は毎回このコードを実行することでダイアログを表示することが出来ていたのですが、Android 11 (API Level 30) 以降、ユーザーが2度「許可しない」を選択すると、次からはダイアログが表示されなくなってしまいました。
2021/07/17

Android の Stroke を特定の辺だけにする

[【Android】特定の辺だけにstrokeをつけたい](https://qiita.com/izumin5210/items/3123939043d2b78b4914)
にあるように、特定の辺の stroke を実現するにはコードでの実装が必要という認識だったのですが、最近になって
[InsetDrawable](https://developer.android.com/reference/kotlin/android/graphics/drawable/InsetDrawable) が XML で使用できることを知ってというより、InsetDrawable の存在を知った、これを使えば XML だけで stroke を消せるのではないかと思い、やってみました。

2020/03/11

by ViewModels() を使って ViewModel を取得する方法

以前は以下のように [ViewModelProviders](https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders) を使用して [ViewModel](https://developer.android.com/reference/androidx/lifecycle/ViewModel) を取得していましたが、この方法は Deprecated になりました。

```kotlin
val myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
```

ドキュメントを見てみると、代わりに kotlin の委譲 `by viewModels()`、もしくは `ViewModelProvider`使い方は最後に参照として書きました を使ってね。と書いてあります。

ところが、`by viewModels()` はどう使うのかが、何処にも書いてありません少なくとも2020年3月10日時点で公式のドキュメントはなさそう。

そこで、ネットの情報とコードを参考に使ってみました。

2020/03/07

Android Q で外部ストレージのファイルが開けなくなった

Android Pi (API Level 28) まで正しく動いていたアプリが、Android Q 上で動作させると動かなくなってしまいました。

具体的には、External Storage にファイルを書き込もうとすると、以下のような例外が発生してしまうのです。

`java.io.FileNotFoundException: /storage/emulated/0/202003061644.zip: open failed: EACCES (Permission denied)`

Android Pi までは動作していたので、当然 `WRITE_EXTERNAL_STORAGE` と `READ_EXTERNAL_STORAGE` パーミッションは適切に静的にも動的にも取得しています。

2020/03/06

VS Code のターミナルで Ctrl + p を使えるようにする

[Visual Studio Code](https://code.visualstudio.com/) がどんどん便利になってきてます。
最近、[Remote Development](https://github.com/Microsoft/vscode-remote-release) を入れたのですが、遠隔マシン上のコードがさもローカルにあるかのように扱えて重宝しています。

しかし、そうなると気になるのがターミナルの使い勝手。
Remote 中は付属ターミナルの方が圧倒的に便利既にssh接続済みのターミナルが複数作れるなので、別途ターミナルを開くのは、あり得なく感じます。
ところが一つ問題が。Ctrl + p を押すと、"Go to File" 機能が働いて、ターミナルからフォーカスが外れてしまうのです。