前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

メアド、パスワードの入力候補を無効化したい

課題

Androidの8.0からAutofill機能が追加され、メアドとパスワードを記憶、自動セットしてくれるようになったが、 新規入力画面ではメールアドレス、パスワードの保管を無効化したい。どうすればよいか。

対応

importantForAutofillno にする

<TextView
    android:importantForAutofill="no" />

逆に yes にすればAndroidが普段AutoFillをしないような項目でも使えるようになる(はず)。

この対応がなぜ必要になったか

新規会員登録画面で別画面から取得したメールアドレス欄をisClickable,isFocusableがともにfalseな状態で初期表示させていたが、 パスワード入力時にAutoFill機能が発動し、メールアドレスが変更されてしまった。 その結果、別画面で実施していたメアドの存在チェックが意味をなさなくなってしまった。 EditTextやめればいいじゃんという考えもあると思うけど、 OAuthログイン時にはここでメールアドレスの入力が必要になるなどの分岐が存在した。

まあ新規登録時にAutoFillは普通いらないはず。

Fragmentから親ActivityのonActivityResultを呼ぶ

課題

Fragmentから親ActivityのonActivityResultを呼びたい。どうすればよいか。

対応

昔の実装見たら解決済みだったのだけど、あれ、どうやるんだっけ?となったのでメモ。

onActivityResultをpublicでoverrideする

onActivityResultはprotectedで定義されているのでそのままoverrideしてもFragmentから実行できないのでpublicを明示してscopeを拡大する

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

   ...省略
}

直接呼ぶ

Fragment側でactivityを親Activityにcastして使う

if (requiredActivity() is HogeActivity) {
    (requiredActivity() as HogeActivity).onActivityResult() //パラメータは省略
}

Play Install Referrerをアップデートすると追加のパーミッションが要求されることがある

追記

この問題はInstall Referrerの 1.1.2 で解消されたらしい。まだ未確認だけどもう上げても大丈夫そう。 stackoverflow.com

課題

アプリをリリースしようとしたところ、 READ_PHONE_STATE が追加パーミッションとして要求されますと警告が出た。

原因

Play Install Referrerを 1.1 にアプデしたのが原因だった。

対応

気にしない or 1.0 に戻す。「気にしない」を選択するとユーザーに確認アラートが出るはずなので、自分は「1.0に戻す」を選択。 ただし、今後修正される予定なのかどうかも分からない(未確認)。

参考

stackoverflow.com