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

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

カメラのないpcを使ってAndroidStudioのエミュレータでカメラをエミュレートすると、、、

金田著「[はじめてのandroidプログラミング 第5版](https://www.sbcr.jp/product/4815607968/)」を使って、勉強しています。

 「第10章カメラアプリをつくろう」で使っているIntent.resolveActivity関数について動作を確認してみます。
 本章で紹介されているコードを写経し、デスクトップPCなどカメラのない環境で実行すると、いくら撮影のボタンを押しても撮影できません。(物理的にカメラがないのだから撮影ができないのは当たり前ですが、、、)では、コード的にはどこで制限がかかっているのでしょうか?
 それは、本文中(p276第6行目)にも解説されていますが、resolveActivity()関数のパラメータpackageManagerの内容を解析した結果、resolveActivity()関数がnullになっているからです。
 そこでコードを少し手を加えて、デバッガでプリントデバッグをして、様子を確認してみましょう。

 以下、本書を持っている前提で説明します。本書を使って勉強中の方、一緒に勉強しましょう。

##0.前提
 p2

元記事を表示

HitTestを実施した際に、Containerが反応しない

# 問題

テスト環境でHitTestにてContainerを検出することを確認後、本番環境に実装を行った。
が、なぜかContainerがHitTestにて検出されない問題が発生した。

# 解決方法

Containerのcolorに透明な色を適用することで、HitTestにて検出されるようになった。

# 原因

Flutter.devのContainerのページにも記載があったが、colorに何もしていない場合、ContainerはHitTestにて検出されなくなってしまうみたい。

> By default, containers return false for all hit tests. If the color property is specified, the hit testing is handled by ColoredBox, which always returns true. If the decoration or foregroundDecoration properties are specified, hit testing is handle

元記事を表示

Androidのログ出力ライブラリ”Timber”

どうも”おもり”です。

今年はOSS活動に精を出していこうと考えています。
Android開発のOSS活動。力不足の自分でもやっていけそうなissueを探している中、
以下のようなissueを見つけた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276053/740e7726-d41d-ab53-11ff-20d8c9a3246a.png)

[https://github.com/uhooi/UhooiPicBook-Android](https://github.com/uhooi/UhooiPicBook-Android)より

“good first issue”のタグが付いているので、いざやってみようと思ったのですが、
Timberとは何ぞや状態だったので、色々ネットを調べあさりました。
調べた情報をまとめて、Timberの良いところをサクッと学べるような記事を書きます。

# Timberとは?

Timberとは、Androidのログ出力ライブラリです。

And

元記事を表示

Android11から地味に変わったパーミッション

# パーミッション is 何
Androidアプリはアクセスが制限されたサンドボックス内で実行されるため、アプリの外部にあるリソースや情報を使用する必要がある場合には、権限をリクエストする必要があります。この権限がパーミッションです。

Android5.1(APIレベル22)以前は、アプリのインストールと共に必要なパーミッションがアプリに付与されるため、特に権限のリクエストをする必要がありませんでした。

しかし、Android6.0(APIレベル23)以降からはガラッと変わり、パーミッションが必要なタイミングでユーザにリクエストをしなければいけなくなりました。例えば、現在地を取得する時に、端末に「位置情報の利用を許可しますか?」みたいな画面が出てくるようになりました。

# Android11からまた変わったパーミッション
Android11(APIレベル30)から、アプリが

– 位置情報
– カメラ
– マイク

に関するパーミッションをリクエストするたびに、「今回のみ」というオプションが表示されるようになりました。
ちなみに、iOSでは実はiOS13(正式公開日が2019/9

元記事を表示

KotlinでMapとListをfor文で操作しよう!

### Key:Valueが1:1のMapをListにする

“`Kotlin:
// 1:1
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
// mapのすべてのvalueが格納される
val valueList = ArrayList(map.values)
var list: MutableList
list = ArrayList()
list.addAll(valueList)
“`
### 1:1のMapを条件分岐でListに格納する

“`Kotlin:
val map = mapOf(“key1” to “val1”, “key2” to “val2”, “key3” to “val3”)
val valueList = ArrayList(map.values)

// key1のvalueがarray変数に格納される(“val1”)
var araay = map.get(“key1”).toString(

元記事を表示

【Android】加速度センサーの値を表示する方法

#プログラミング勉強日記
2021年1月21日
Androidに搭載されている加速度センサーを使ってx軸、y軸、z軸の各軸にかかる加速度を測定する方法をまとめる。

#加速度センサーについて
 加速度センサーは以下のようにx軸、y軸、z軸のそれぞれに対して単位Gの値として情報を素得できる。垂直で縦に持つ場合は、以下のようになり-y方向に重力加速度がかかるので、加速度センサーの値は(x, y, z)=(0, -1, 0)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/1d9727b1-c6d6-0b13-fe68-e6abf6677ccb.png)
[](https://blog.smartdrive.co.jp/b548607cc5ad/)
出展: iOSイベント処理ガイド

#加速度センサーの値を表示するプログラム

“`java:MainActivity.java
package sample;

import android.app.Activity;
impo

元記事を表示

Google Play App Signing に対応させる

# 概要

自分の個人アプリを Google Play App Signing に対応させた時の作業に基づき、署名移行時の具体的な作業内容について書きます。誤った内容があったらコメントいただければと思います。

詳細: https://developer.android.com/studio/publish/app-signing?hl=ja

# 基礎知識

## Google Play App Signing とは

Androidアプリに対して付与する署名の新しい管理方式。アプリ署名とアップロード署名の2段階で署名され、安全な鍵管理が行えるようになります。
**アプリ署名**:Google Play側で管理され、登録時に勝手に署名されます。こちらから触れず、基本的には変わりません。
**アップロード署名**: ユーザ側で管理し、Google Playにアプリをアップロードする時にこれで署名されている必要があります。流出時などに申請で変更することができます。

## 対応期限

Google Playにアプリ登録するためには必ず署名が必要になり、現状では従来の署名方式と、Goo

元記事を表示

Fragmentから他のフラグメントへの画面遷移

## FragmentからFragmentへの遷移
画面遷移の動きは、以下のようになります。

![画面収録-2021-01-21-10.13.11.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953777/68363404-41b2-3c9b-aa1d-87ae09c053d5.gif)

動きとしては、
・MainActivityにFragment01(WelcomeFragment)を表示
・Fragment01からFragment02(MainFragment)へ遷移
・Fragment02からFragment03(SubFragment)へ遷移

## サンプルコード

“`kotlin:WelcomeFragment
class WelcomeFragment: Fragment(R.layout.welcome_fragment) {

private var _binding: WelcomeFragmentBinding? = null //
privat

元記事を表示

3 ヶ月掛けて 1 人で Android アプリをリプレイスした話

最近、現場で 3 ヶ月掛けてアプリのリプレイスを 1 人で行いました。
下記はプルリク時の修正ファイル数の画像です。

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93963/ddc2ae75-b208-e5a0-74cc-23142358358c.jpeg)

どのようなきっかけでリプレイスを行い、問題点は何だったか、具体的に何をやって結果どうなったかなどをまとめます。

# ソースコード構成

コア機能を実装したモジュールがあり、各社ごとにアプリを作成し、各アプリがそのモジュールを参照する構成となっております。
リプレイス対象としてはモジュールと、ある会社向けにリリースしていたアプリの 2 つになります。

# なぜリプレイスを行ったのか

きっかけはとある会社から直近で大幅な機能追加をしてほしいと要望があったことです。
ところが現行アプリは機能追加を想定した作りになっておらず、このまま追加するのが困難だと予想されました。
また、今後もさらに機能追加を行っていくとのことで、このままでは間違

元記事を表示

AndroidからAWS Cognitoのユーザプールをさっくり使う

![スクリーンショット 2021-01-21 8.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924658/026507a3-3977-e0d2-c867-46e2c94ed8b3.png)

サインアップやサインイン、パスワード再発行など、ユーザ管理がないアプリケーションを見かけない日はありません
とはいえ自前でバックエンドのシステムを作るのも大変…
でもAmplifyはちょっとリッチすぎる気がする…

そんな私のための備忘録です

下記のことができます

– メールアドレス、パスワードによるサインアップ、ログアウト
– メールアドレス認証
– パスワード再発行

メールアドレスやパスワードはガッツリ個人情報です
その辺りの管理をAWSにお願いできるのはかなり気楽ですよねー

# 前準備
## SES (Simple Email Service)に配信用のメールアドレスを登録する
![0_SESにメールアドレスを登録し、送られたURLをクリックしてVerifyする.PNG](

元記事を表示

ダークモードにまつわる誤解を解いておく

Githubがダークモードに対応したのが昨年12月。調べて見るところ我々開発者には「目に優しい」と認識されている一方、一般層には単に「格好いいモード」と思われていたりなようです。更にそれだけでもないという記事を見つけました。

## 概要
以下、流行ってるな~と思ったので、まとめました。「ダークモード」のメリット、デメリット。本当のところ。[GitHubをダークモードで使う](https://qiita.com/TerToEer_sho/items/7e14149c7172a2eb19c5)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f77e6e14-4ee6-5ba9-b569-dfe95522d282.png)
[ダークモードに対応したデザイン](https://qiita.com/sugar_tk/items/54562d8756b69774aecf#%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89%E3

元記事を表示

【Android】センサーを使う方法

#プログラミング勉強日記
2021年1月20日
[一昨日の記事](https://qiita.com/mzmz__02/items/d5fc432fbc772866b2e8)でAndroidのセンサーAPIについてまとめた。今日はAndroidのセンサーの使い方を簡単にまとめる。

#Androidセンサーを使う方法
 Androidセンサーを使う処理を説明する。

##1. SensorManagerを取得
 SensorManagerを取得するためには、getSystemServiceメソッドを使う。引数には、android.contentパッケージのContextクラスの定数SENSOR_SERVICEを指定する。

“`java:SensorManagerの取得
// SensorManagerインスタンス
private SensorManager sensorManager;

@Override
public void onCreate(Bundle savedInstanceState) {
// SensorManagerのインスタンスを取得する
senso

元記事を表示

HMSスマホでLINE CLOVA Assistantを有効にする手順と機能紹介

# HMSスマホの音声アシスタント

音声アシスタントとは音声だけで端末を操作する機能です。

一般的に、Android端末ではGoogleアシスタントがプリインストールされ、使われています。ところが、ファーウェイの最新端末にGoogleのアプリがプリインストールされていないし、GMSも入っていないので、Googleアシスタントが利用できません。

ファーウェイは去年[セリア(Celia)](https://consumer.huawei.com/en/emui/celia/)という音声アシスタント機能をリリースしました。しかし、残念ながら、日本語がまだ対応されておらず、日本もまだサポート地域に入っていません。

幸い、HMS端末で使える音声アシスタントはほかにあります。それはLINE CLOVA Assistantです。しかも、以下の[HMS端末ではLINE CLOVA Assistantが標準搭載になっています](https://clova.line.me/huawei/)。

– [HUAWEI P40 Pro 5G](https://consumer.huawei.com/jp

元記事を表示

スコープ関数のrun()関数を使わずに、ピリオドでメソッドを連結させる

金田著「[はじめてのandroidプログラミング 第5版](https://www.sbcr.jp/product/4815607968/)」を使って、勉強しています。

 「第9章カウントダウンタイマーを作ろう」で使っているkotlinの文法のテクニックを解析してみます。
 スコープ関数のrun関数を関数式に直してみます。
 はじめはrun関数の意味が分からなかったので、まずはrun関数を使わず、インスタンスを作り、そのメソッド()を一行1行、操作する古いやり方に書き換えようとしました。しかしSoundPoolクラスの[コンストラクタ](https://developer.android.com/reference/android/media/SoundPool#public-constructors_1)が非推奨になっていたので、本書のとおりSoundPool.Builder()でインスタンスを作ることにしました。調べて行く過程でrun関数を使わずに、ピリオドでメソッドを連結できることが分かったので紹介します。

 以下、本書を持っている前提で説明します。本書を使って勉強中の方、一

元記事を表示

Android端末におけるMSALを使用したSSO認証

急に「これやりたいから調べてくれない?」と言われた自分用メモ

## 結論
https://docs.microsoft.com/ja-jp/azure/active-directory/develop/quickstart-v2-android
https://github.com/Azure-Samples/ms-identity-android-java
公式のクイックスタートとサンプルリポジトリのREADMEとソースを読むと良い。~~ドキュメントたくさんあるし自分がこれを書く必要なくない?~~

## アプリの初起動
`PublicClientApplication.createSingleAccountPublicClientApplication()`を叩いて`ISingleAccountPublicClientApplication`インスタンスを取得する。
このインスタンスを使用して、サインインやサインアウト、アカウントの状態確認等ができる。

`auth_config_single_account.json`はMSALで使用する構成ファイル
Azureにアプリ登録した

元記事を表示

Android UIテストでActivityとFragmentにコンストラクタインジェクションする

DIの仕組みが導入されていないAndroidプロダクトでのUIテストは、Activity・Fragmentからアクセスされる外部依存の差し替えをどうするかが課題になる場合があります。
テスト実行時にはアクセスしたくない依存がある場合(例:API通信)、これに当てはまります。

ここではコンスタラクタとデフォルト引数を駆使しながら、テストコード上で依存を差し替えできるようにする方法について紹介します。

## ActivityとFragmentのコンストラクタインジェクション

ActivityとFragmentは基本的にカスタムのコンストラクタを作成しません。
システムによって引数を持たない空のコンストラクタからインスタンスが生成されるためです。

一方、カスタムコンストラクタの引数にすべてデフォルト値をセットした場合は、引数なしのコンストラクタを追加で生成します。そのコンストラクタからインスタンスを生成したときは、プロパティはデフォルト値で設定されています。

これを利用して、プロダクトコードではデフォルト引数の値を参照し、テストではコンストラクタから実装を差し替えるようにすること

元記事を表示

Kotlin SAM変換(ラムダ式)を元に戻す

 金田著「[はじめてのandroidプログラミング 第5版](https://www.sbcr.jp/product/4815607968/)」を使って、勉強しています。

 「第8章タイマーを使ってスライドショーを実装する」で使っているkotlinの文法のテクニックを解析してみます。
 今日のテーマは、「SAM変換を元に戻す」です。初心者にとって、ラムダ式は難しいですよね。javaのインターフェースでメソッドをひとつしか持たないものをSAMインターフェースと呼び、KolinではSAMインターフェースを引数としたメソッドを、ラムダ式で置き換えることができます。これをSAM変換といいます(本書p121から引用)。
 そこで、SAM変換しているコード、変換を使わない元のコードに戻してみようと思います。
 
 以下、本書を持っている前提で説明します。本書を使って勉強中の方、一緒に勉強しましょう。

##0.前提
 p227まで写経が済んでいるとします。

##1.原型
 p227まで写経が済んでいる状態のコードを示します。説明に不要な部分は、著作権に配慮して省略しています。

“`Main

元記事を表示

【Android】APIのレベルによるエラーの対処方法

#プログラミング勉強日記
2021年1月19日
最近Android開発をしていて、普段と違うAndroid端末を利用したときにエラーが出た。その解決方法を示す。

#エラー内容
 Android端末のAPIよりもプロジェクトのAPIの方が新しく、このエラーが出た。なので、プロジェクトのAPIをAndroid端末のAPIに合わせることで解決する。

“`
Session ‘app’: Installation did not succeed.
The application could not be installed: INSTALL_FAILED_OLDER_SDK
“`

#解決方法

##1. 必要なSDKをインストールする
 `ツール→SDKマネージャー→Android SDK`から選択して端末と同じSDKをインストールする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/58bc76f9-ac54-3978-1677-97ffa8171e8b.png)

元記事を表示

Android QのScoped StorageでJPEG/MPEG撮影→外部Storageに保存→EXIF編集

# TL;DR

Android QからScoped StorageのFeatureによってCameraで撮影したJPEG/MPEGを外部ストレージ直下の任意Directoryに保存することができなくなりました.

`DCIM`や`Picture`/`Video`のような汎用Directoryに保存することになりますが,それでもAndroid PまでのようにExternal StorageのPathに直接ファイルを保存することはできません.

そのため,`MediaStore` (`ContentProvider`/`ContentResolver`)を使ってExternal Storageの汎用Directoryにファイルを保存するようにします.

撮影したJPEGのEXIFを`ExifInterface`で自力で編集している場合も直接External StorageのPathからは読み書きできないので,`MediaStore`経由で読み書きするようにします.

# Permissionについて

Android PまではExternal Storageへの保存のために,↓ の宣

元記事を表示

HiltViewModelでAbstractなViewModelをInjectしてみるチャレンジ

ちょっとHiltViewModelで何ができて何ができないのかわからないので調べてみましょう。

HiltViewModelは基本的にはこういう感じで利用できます。

“`kotlin
val viewModelHilt: VideoPlayerHiltViewModel by viewModels()
“`

“`kotlin
@HiltViewModel
class VideoPlayerHiltViewModel @Inject constructor(val videoPlayer: VideoPlayer) : ViewModel() {
}
“`

https://github.com/takahirom/hilt-sample-app のComponent図です。(arunkumar9t2/scabbardによる生成 )どうやらActivityRetainedComponentの下にViewModelのComponentがいるようですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

OTHERカテゴリの最新記事