2020/03/11

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

以前は以下のように ViewModelProviders を使用して ViewModel を取得していましたが、この方法は Deprecated になりました。

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

ドキュメントを見てみると、代わりに kotlin の委譲 by viewModels()、もしくは ViewModelProvider1 を使ってね。と書いてあります。

ところが、by viewModels() はどう使うのかが、何処にも書いてありません2

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

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_STORAGEREAD_EXTERNAL_STORAGE パーミッションは適切に1取得しています。

2020/03/06

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

Visual Studio Code がどんどん便利になってきてます。 最近、Remote Development を入れたのですが、遠隔マシン上のコードがさもローカルにあるかのように扱えて重宝しています。

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