Android関連のことを調べてみた2021年09月10日

Android関連のことを調べてみた2021年09月10日
目次

AndroidでHiltをつかう(その2)

Androidで主に使用される依存性注入は、コンストラクタインジェクションとフィールドインジェクション。

## インジェクションの基本
1. Applicationクラスに「@HiltAndroidApp」をつける(Hiltが使用可能になる)
1. フィールドインジェクションされたいクラスに「@AndroidEntryPoint」をつける
1. フィールドに「@Inject」をつける(フィールドインジェクション)。lateinit宣言も必要
1. バインディングしたいクラスのコンストラクタに「@Inject」をつける(コンストラクタインジェクション)

(注意1)
エントリポイントとは、Hilt が管理するコードとそうでないコードの境界
(注意2)
@AndroidEntryPointを付ける場合は、それに依存するAndroidクラスにもアノテーションを付ける必要がある。たとえば、フラグメントにアノテーションを付ける場合は、そのフラグメントを使用するアクティビティにもアノテーションを付ける必要がある

## HiltでサポートされているAndroidクラス
| クラス名 ||
|:-

元記事を表示

iOSとAndroidを区別するのに便利なJavaScript置いておくね

“`
var isAndroid = (UA && UA.indexOf(‘android’) > 0) || (weexPlatform === ‘android’);
var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === ‘ios’);
“`

これは基本的にユーザーエージェント(UA)を見て正規表現でandroidかiOSかを判別しています。`UA &&`の部分はnullチェックですね。UAの値を取得できなかった時にエラーで落ちないようにしています。

日本のスマホのシェアはAndroidとiOSが99%を占めているので上記以外はその他で例外処理をしてしまって良いでしょう。

元記事を表示

エミュレーターの画面を録画する(+gidに変換してQiitaに上げられるようにする)

AndroidStudioではLogcatの`Screen Record`からエミュレーターの操作をキャプチャできます。
のですが、どういうわけかこんな風に画面がチラつきまくってまともにキャプチャできない! 困った!
![RecordFailed.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/1d47ee28-45b8-4ee2-4548-a1c678928294.gif)

# Win+Alt+Rで録画する
というわけでショートカットキー`Win+Alt+R`からキャプチャをしていきます。
録画がスタートすると次のような録画コントローラーが表示されます。
録画.png
**録画開始時にアクティブなウィンドウのみ

元記事を表示

BroadcastReceiver を unregisterReceiver する際に java.lang.IllegalArgumentException: Receiver not registered が出るので修正する

# 概要
Android アプリ開発で、(実装がまずくて)BroadcastReceiver の unregister 時に例外が起きたので対応内容を書きます。

## java.lang.IllegalArgumentException: Receiver not registered
ContextImpl に register していない BroadcastReceiver インスタンス(null 含む)を unregister しようとするとこの例外が出ます。

“`
Caused by: java.lang.IllegalArgumentException: Receiver not registered: jp.toastkid.music.MediaPlayerService
at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1555)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1789)

元記事を表示

【Android】Button押下イベントのハンドリング in Kotlin

# ➊ はじめに
Androidで、入力イベントをハンドリングする方法を調べました。

# ➋ どんな感じ?
百聞は一見にしかずということで、こんな感じ~になります。
「`Button`」のみのアプリです?

※結果は、`Logcat`で見てください。

# ➌ お勉強ポイント
以下の代表的なものについて実装してみたいと思います。

– クリック
– ロングクリック
– タッチ ( 押す、離す、移動する)

※詳細はこちら?「[入力イベントの概要](https://developer.android.com/guide/topics/ui/ui-events?hl=ja)」

# ➍ Button押下イベントのハンドリング
例えば「クリック」の場合、イベントを受け取るために「setOnClickListener()」メソッドをコ

元記事を表示

【MPAndroidchart】 棒グラフの横軸を動的に変更したいときに頭に入れておくとよいかも?な点

##概要
Androidアプリ [ツケ台帳](https://play.google.com/store/apps/details?id=com.chelak.tsuke_daicho) のツケ金額の解析画面を作る際、
MPAndroidの棒グラフ横軸を動的に変更(要素数に合わせて本数変更)したのですが、
若干詰まったのでメモ
アプリの解説、過去の投稿は→[こちら](https://qiita.com/n_ku/items/de1675af32ca53acc562)

MoshiをKotlinで使う

Kotlinで、[Moshi](https://github.com/square/moshi)を使う場合の方法を記載します。

“`gradle:app/build.gradle.kts
implementation(“com.squareup.moshi:moshi-kotlin:1.12.0”)
kapt(com.squareup.moshi:moshi-kotlin-codegen:1.12.0)
“`

### Adapterの登録を行います。

DaggerなどのDIで、Module化すると楽になります。

“`kotlin
val moshi = Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build()
“`

* Hiltを利用した場合

“`kotlin
@Module
@InstallIn(SingletonComponent::class)
class JsonModule {

@Provides
@Singleton
fun provideMoshi

元記事を表示

お問い合わせフォーム メール送信機能の作成

##はじめに
備忘録として、自作アプリに組み入れたお問い合わせフォーをどの様にして作成したのかを記述

##環境

⚫︎OS : macOS Catalina 10.15.7
⚫︎Androidsutdio : 4.2.1
⚫︎Kotlin : 1.5.21

![スクリーンショット 2021-09-09 0.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/fe79af2b-bcf3-4983-0fb8-7d4004914e45.png)

画像の送信ボタンを押すと、
![スクリーンショット 2021-09-09 0.41.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/e127f697-e956-20bd-06fa-67fc6be8eeef.png)

gmailの方でタイトルと本文を受け継ぐ処理をしていきます
※本来、メールの送信先のアドレスも受け渡しますが、個人情報保護

元記事を表示

【Android】Jetpack ComposeでGithubのリポジトリ検索アプリを作ってみる

## 概要

Androiderのみなさま、[Jetpack Compose](https://developer.android.com/jetpack/compose?hl=ja)はもう使いましたか?
今年(2021年)の7月末にようやく安定版(1.0)が出て、界隈でいっそう盛り上がりを増していますね。

今回はComposeを使ってGithubリポジトリを検索するアプリを作成してみました。

## できたもの

https://github.com/alpha2048/JetpackComposeTest

アプリを開くと検索画面を表示し、最初は「Jetpack Compose」で検索します。
リポジトリをタップするとWebViewで該当リポジトリを表示します。
デザインはMaterial Designからグレー色を適当に散りばめてますが、少し配色ミスったかも?

[Unity] Android NativePluginの実装の仕方

# はじめに
Unityで使用するNativePluginのタスクがあったのでとりあえずテストでサンプルを作成してみました。
ここでは、Nativeのアラートを表示させるまでの忘却録です。

## 準備
macOS Catalina: 10.15.7
Unity 2018.4.19f
Android Studio 4.0.1

## Android Studioでプロジェクトを作成

今回は「AndroidStudio4.0.1」で作成していきます。
![android001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/b27ed595-5ee7-4a67-ebd3-cbaedaff4da0.png)

「Select a Project Template」で「No Activity」を選択
![android002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1022988/a0bb70e2-948

元記事を表示

【Flutter】カウンターアプリに書かれたコメントを解説する

`flutter create` で新しく Flutter プロジェクトを作ると自動生成されるのが「カウンターアプリ」であることは、Flutter を触ったことがある方であればピンとくるのではないかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134943/20a5ec25-afe9-548f-0cff-32bb81fc16d1.png)

Flutter アプリ開発者にとっての初めの一歩とも言うべきカウンターアプリですが、その `main.dart` に書かれているコメントを読んだことがあるでしょうか。私は毎回全置換で消しています。

ただ改めて考えてみると、このコメントも __Flutter フレームワークの開発チームが Flutter アプリ開発者のためにわざわざ書いてくれたもの__ だと思いますので、この記事ではそのコメント全てを翻訳しながらしっかりと内容を確認してみたいと思います。

また、初学者向けの簡単な解説も交えつつ書いていければと思いますので、何かの役に

元記事を表示

API30対応でcookie認証が通らなくなった

## 背景
2021年11月以降、AndroidアプリのAPIレベルを30以上に対応させる必要があります。
漏れなく対応に追われていたのですが、APIレベル29から30に上げたとたん、アプリの認証処理が失敗するようになったのでその調査の備忘録です。

## 調査
認証系なのでcookie周りが怪しい…。
取り敢えずAndroid developerの変更内容を読んでいたのですが、cookie周りの取り回しが変更されたとかは見つかりませんでした。
[Android 10(API レベル 29)から Android 11(API レベル 30)に移行する](https://developer.android.com/distribute/best-practices/develop/target-sdk?hl=ja#pre11)

仕方なしにアプリの実装を追いかけて、API29とAPI30で何が違うのか追っかけてみたところ
CookieManagerのsetCookieにてsecure属性が付与された項目がAPI30ではrequestに乗っかっていませんでした。

なじぇ…と思いながら

元記事を表示

【Unity】AndroidアプリをGooglePlayに公開する

# Unity
下記項目を設定

– 会社名
– プロダクト名
– アイコン
– パッケージ名
– ヴァージョン
– ビルド番号
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/10eb3668-d396-6d72-83e7-b16ea3edbcfe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/669b561b-03a3-b48e-9f26-0d3079903bc6.png)
ARM64にチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1264045/76d5d0dc-4b0e-5933-0e67-80210f71cf4b.png)

キーストアを登録
![image.png](https://qiita-image-store.s3.ap-

元記事を表示

【ReactNative】アプリのプロフィール画像を変えるときに下から出てくる選択欄(アクションシートというらしい)を作ってみる

#画像のようなタップしたときに下から出てくる選択欄(アクションシート)を実装していきます。
![スクリーンショット 2021-09-02 19.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/a376d67b-7783-c693-5df1-e8dc538e6428.png)

この機能はよくアプリのアイコンや写真を設定する時に使われていると思います。
実際にはiPhoneのappleIDのアイコンやLINEのトップ画を設定するときに使われています

##プロジェクト作成、必要なライブラリをインストール
まずはReact-Nativeプロジェクトを作成します。
ちなみにExpoではなく、素のReactNativeで作っていきます。
作成方法はドキュメントなどを参考に進めてください。

#####次に必要なライブラリをインストールします
yarnの場合“`yarn add react-native-cross-actionsheet
“`npmの場合“`npm install

元記事を表示

【androidアプリ】リリース直前に気を付けるべきだった4つのポイント

##概要
Androidアプリ [ツケ台帳](https://play.google.com/store/apps/details?id=com.chelak.tsuke_daicho) のプログラミングが完了した後、リリースする直前にいくつか調整したので備忘録的にメモしてみます。 アプリの解説→[こちら](https://qiita.com/n_ku/items/de1675af32ca53acc562)

元記事を表示

LocationManagerでAbstractMethodErrorが発生する件

現在、Androidで位置情報を取得する方法としては、[FusedLocationProviderClient](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient)を使用するのが一般的かと思いますが、一部のGMSの使えない環境も考慮してLocationManagerを使用する場合もあるかと思います。このLocationManagerでAbstractMethodErrorが発生するという現象に遭遇したので書いておきます。

# 何が起こるのか

パーミッションの取得とか諸々置いておいて、位置情報を取得しようとするとLocationManagerのインスタンスを取得して、requestLocationUpdatesにパラメータ付きでLocationListenerを登録します。
位置情報が取得できればonLocationChangedがコールされるので、ここでlocationを使ってごにょごにょします。

“`kotlin

元記事を表示

QiChat MANIAX(2) ヘッダのキーワードを網羅する??

#はじめに
今回はQiChat MANIAXの続編です!ヘッダのキーワードについて、詳しく見ていきましょう?‍??‍?

#conceptで同類を定義する???

conceptは、リストの単語とフレーズを定義するものです。下記のように使います↓

“`
concept:(name) [word1 word2 “word3 word4”]
“`

* word1とword2は個々に独立した単語
* word3とword4は複数の単語によるフレーズ。間に合うスペースのある単語を一つのフレーズとして扱う場合は、ダブルコーテーション(“)でくくってください
* nameはリストにつけるコンセプト名。コンセプトを使用するときに使います

⚠️注意
フレーズとは文章ではなく単語の集まりであり、句読点は自動的に排除されます。
コンセプトはどの単語でもglobalであり、異なるTopicでも使用可能です?

以下は使用例と実行例です。

“`
topic: ~introduction ()

concept:(greetings) ^rand[おはよう スラマッパギ “許して ヒヤシンス”]

元記事を表示

QiChat MANIAX(1) Topicファイルのルールについてイントロ編

#はじめに
前回のあとがきでも書きましたが、今回からはPepper SDK入門とは別に、QiChat MANIAXとしてTopicファイルのルールを詳述していきます?

さて、[Pepper SDK入門(24)](https://qiita.com/kskrin/items/1ad470634d8b36cb1f5d)で触れたように、Topicファイルには先頭にファイルの名前を記述するなどのルールがありました。例としては次のようなものです。

“`
topic: ~introduction ()

u:(ソルトちゃんこんにちは) ぼくPepperですけど
“`
今回はQiChat MANIAXのイントロダクションとして、このTopicファイルのルールの概要を見ていきます⛵️

#ルール事始め〜郷に入った場合の郷を知る〜
ここで言うルールとは、ユーザー入力とPepperの返答を関連づけるものです。
区切り文字、ルールの機能や特徴が様々なケースに対応してくれます。恢恢!
ルールにはユーザールール、ユーザーのサブルール、Proposalの三種類があります。

#ユーザーとPepperとルー

元記事を表示

【初心者向け】ディープリンク技術の概要と注意点

チーム内で「ディープリンク」「ダイナミックリンク」「ユニバーサルリンク」等の用語の認識が合っているのか怪しかったので、整理してみました。

基本iOS目線で書いてますが、実装寄りではなく概念寄りの内容なので、Android開発者でも読めると思います。

私の認識違いなどがありましたら、コメント欄にてご教示いただけますと幸いです。

※この記事ではURL/URIの区別を厳密に意識せず、より馴染み深い”URL”に統一して記述しています。

# ディープリンク (Deep Link) とは

任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称であり、概念を表す用語です。

スマホアプリで代表的なユースケースは以下のとおりです。

– スマホのブラウザでWebコンテンツ内のリンクをtapした際に、AアプリのX画面に遷移させる。
– Aアプリのボタンをtapした際に、BアプリのY画面に遷移させる。

# ディープリンクを実現する仕組み

## カスタムURLスキーム

– URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。

元記事を表示

【Android】画像を選択して、ImageViewに表示 in Kotlin

# ➊ はじめに
「`画像を選択して、ImageViewに表示する方法`」として「**startActivityForResult** と **onActivityResult**」で実装していたのですが、Androidは日進月歩しているらしく、この方法で実装するのは`非推奨`になってしまいました。

> 基盤となる startActivityForResult() API と onActivityResult() API はあらゆる API レベルの Activity クラスで使用できますが、AndroidX Activity と Fragment で導入された Activity Result API を使用することを強くおすすめします。

とのことなので、推奨方法をここ?「[`アクティビティの結果を取得する`](https://developer.android.com/training/basics/intents/result)」で調べつつ、実装してみたいと思います。

# ➋ どんな感じ?
百聞は一見にしかずということで、こんな感じ~になります。
「`SELECT IMAGE

元記事を表示

OTHERカテゴリの最新記事