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

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

AndroidでPermissionをリクエストするとき

## AndroidでPermissionをリクエストするとき

ネットで探すと、未だにリクエストを開発者側でハンドリングする記事ばかり出てきます。

しかし[公式ドキュメント](https://developer.android.com/training/permissions/requesting?hl=ja)では、**RequestPermission**や**RequestMultiplePermissions**のコントラクトを使用した方がいいと書いてあります。

> 従来からある方法では、権限リクエストの一部として開発者自身がリクエスト コードを管理し、このリクエスト コードを権限コールバックのロジックに含めます。別の方法として、AndroidX ライブラリに含まれる RequestPermission コントラクトを使用して、システムに権限リクエスト コードの管理を許可することもできます。RequestPermission コントラクトを使用するとロジックが簡素化されるため、可能な場合は使用することをおすすめします。

使用例は以下の通り
Kotlin + Jetpack

元記事を表示

Androidアプリで使用するアプリ固有データまとめ

# 目的
– Android アプリで使用するアプリ固有データの種類・保存についてまとめる。

# Androidアプリデータの保存方法による分類

– Androidでアプリが保存するデータ(以下「アプリデータ」)の種類には以下がある。

(1) アプリ固有のファイル
アプリ独自のファイルで、他のアプリから共有しないファイル。アプリ独自フォーマットのファイル等。

(2) 共有ファイル
メディアやドキュメントなど、他のアプリと共有可能なファイル。一般的なフォーマットで他アプリから利用可能な画像・音声・動画ファイル等。

(3) 設定データ
アプリ固有の設定データ。他アプリからアクセスできない領域へキーと値のペアで保存する。

(4) データベース
構造化したデータを非公開のデータベースへ保存する。

– アクセス手段・必要な許可・アプリのアンインストール時に削除されるかどうかはそれぞれ異なる。
– 詳細は Android developers [データ ストレージとファイル ストレージの概要][link0] 参照。

# ア

元記事を表示

Android Layoutの種類

##レイアウト

– LinearLayout(線形レイアウト)
– すべての子ビューを垂直又は水平の一方向に揃えるビューグループ
– android:orientation属性によりレイアウトの方向を指定します。
– 縦方向に表示:android:orientation=”vartical”
– 横方向に表示:android:orientation=”horizontial”
– 垂直方向のリストは、幅に関係なく、一つの行に1つの子ビューしかない。
– 水平方向のリストは、1行分の高さしかない。

– RelativeLayout(相対レイアウト)
– 子ビューを相対位置に表示するビューグループ
– ConstraintLayout
– フラットなビュー改装を持つ大きくて複雑なレイアウトを作成可能
– RelativeLayoutよりも柔軟性がありAndroid StudioのLayoutEditorで使用しやすくなっている。
– MotionLayout
– アプリ内のモーションとウィ

元記事を表示

リフレクションでKotlinの要素を取得する【Javaリフレクション編】

Androidの単体テストにあたり、privateなクラスやメソッドにアクセスするために使用するリフレクションについてまとめました。

【注意点】
この記事では、筆者がリフレクションを一緒くたに認識していた背景から、KotlinでJavaリフレクションを使用しています。
しかし実際はKotlinにはKotlinリフレクションが存在するため、あえてKotlinでJavaリフレクションを使うのであれば、その理由を明確にできることが望ましいはずです。
次回は、Kotlinリフレクションをまとめます。

##リフレクションとは
リフレクション(reflection)とは、反射、内省、熟考という意味の英単語です。
JavaやKotlinでは、クラスやコンストラクタ、メソッドなどの情報の取得、必要に応じて書き替えるための仕組みを指します。
Java:[Trail: The Reflection API (The Java™ Tutorials)](https://docs.oracle.com/javase/tutorial/reflect/)

リフレクションを使うことで、通常はアクセスできな

元記事を表示

CollapsingToolbarLayoutとSwipeRefreshLayoutの併用

よくあるプロフィール画面のヘッダー画像をparallaxにしつつ、Pull-to-Refreshもできる画面を作ってみたいと思い、いざ実装してみたら一工夫必要だったので記事にしました。

# この記事で紹介すること
goal
この画面のような**prallaxなヘッダー画像**と**Pull-to-Refresh**が共存した画面の実装方法を紹介します。

# 結論
そのまま併用すると、スクロール仕切っていないのにPull-to-Refreshが発動してしまいます。
解決策として、AppBarLayout.OnOffsetChangedListenerにSwipeRefreshLayout.isEnabledを上書きする処理を登録します。

AppBarLayout.OnOffsetChangedListenerが受け取るve

元記事を表示

FlutetrでrequestPermissionのエラー

### FlutetrでrequestPermissionのエラー

Flutterで通知アプリ仕込んでます。

あと少しだったのですが、このエラーが出てAndroid版のビルドはできるのですが、アプリが起動しない。この時点でiOS版はビルド通っていた。

エラーは

“`
E/flutter ( 5307): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: MissingPluginException(No implementation found for method Messaging#requestPermission on channel plugins.flutter.io/firebase_messaging)
E/flutter ( 5307): #0 convertPlatformException (package:firebase_messaging_platform_interface/src/method_channel/utils/exception.dart:1

元記事を表示

【Android&Firebase】Googleログイン実装のDeprecated箇所をリファクタリングしてみた

# はじめに

皆さん、ごきげんよう!れぶです!
2回目のQiitaへの投稿になります。新年早々どこにも外出せずに執筆していきます。

今回の記事は、Firebaseを用いてAndroidアプリへGoogleログイン機能を実装することに関した内容になります。具体的には、Firebaseの公式ドキュメントに掲載されているコードの中で、Deprecated箇所(startActivityForResultとonActivityResult)があるので、リファクタリングしていきます。Googleログイン機能のリファクタリング実装が書かれた記事はあまりないと感じたので、自身がJavaで書いたコードをもとに紹介します。

それでは、参りましょう!!

# この記事の対象者

* 今後Firebase Authenticationを用いて、AndroidアプリにGoogleログイン機能を実装したい方
* 既にGoogleログイン機能を実装済みだけど、Deprecated箇所のリファクタリングが知りたい方

# 開発環境

* Mac
* Android Studio(4.1.2)
* Fireba

元記事を表示

Couchbase Lite開発: Kotlin拡張機能

## はじめに

Couchbase Lite Android 3.0.0-beta02では、Kotlinアプリ開発における慣用的なプログラミング作法のサポートが導入されています。

これによって、Kotlin開発者は、一般的なKotlinアプリケーション開発に用いられる実装パターンを用いてアプリを構築できるようになりました。Couchbase Kotlin SDKは、Couchbase Lite for Androidとシームレスに統合されており、Java APIと同等の機能を備えています。

Couchbaseをモバイルアプリケーションで利用する意義については、以下の記事をご参考ください。

https://qiita.com/yoshiyuki_kono/items/3abd5e32801060a449d2

## Kotlin拡張機能

## 概要

Kotlin開発者は、Couchbase Liteを利用したアプリケーション構築のために、Java APIとの完全な互換性に加えて、Kotlin拡張機能を利用できます。

Kotlin拡張機能パッケージには以下のサポートが含まれ

元記事を表示

【Android】初心者向け シンプルなドラムロール式DatePickerサンプル

Android開発初心者の私はシンプルなドラムロール式のDatePickerを実装しようとした時に、意外と複数のサイトを参照しながら試行錯誤しました。
同じような初心者の方の参考になれば幸いです。

#ドラムロール式DatePickerのイメージ
![Screenshot_1641257836.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/757ecb2d-7383-3a2a-5573-652db16b7f8b.png)

![2a1aee80cd619115f682e1a0b162a90d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546646/b057ae8f-7a9a-6128-4f5f-02cdeed9c911.gif)

#サンプルの仕様
・日付入力欄は直接日付を入力することもできる。
・入力欄が空白など日付として認識できない場合、初期値として今日がDatePickerに表示される。
・入力

元記事を表示

Kotlinの初期化を雑に書いてはダメ!

# はじめに

Kotlinを書かれる方に質問です!!
例えばBuilderパターンで生成されるインスタンスをクラス内で使い回したいとき、
反射的にこんな風に書いていませんか?

“`kotlin
class Sample {
companion object {
// 使い回したいインスタンス
private val a: A = A.Builder().build()
}
}

class A {
internal class Builder {
fun build(): A = A()
}
}
“`

`companion object` の中で初期化処理を書いておけば、
Sampleクラスで何個もインスタンスが作られようと `Sample.Companion.a` は使いまわされます。

“`kotlin
class Sample {
fun getA() = a

companion object {
private val a: A = A.Buil

元記事を表示

【Kotlin】スコープ関数まとめ

#はじめに
最近Androidアプリを作りたくてKotlinを学習してます。基礎です。
今回はスコープ関数をまとめていきたいと思います。

#スコープ関数
この関数は変数のスコープを変更する関数で、コードを簡略化、可読性の向上ができます。
使わなくても機能を実装することは可能です。
なくても困らないけどあれば便利ってやつですね。

#with関数
同じオブジェクトに繰り返し処理を行う場合に有効です。

次のようなPersonクラスを用意します。

“`Kotlin
class Person(val name: String) {
var age: Int = 0
fun message(): String {
Log.d(“message”, “私は $name です。 $age 歳です。”)
}
}
“`

with関数を使わない呼び出し側はこのようになります。

“`Kotlin
val person = Person(“REON”)
person.age = 21
person.message() // 私は REON です。 21

元記事を表示

【android】ActivityからActivityの画面遷移

こんにちは。
2021年の年末はAndroid Studioをいじくっていました。完全に素人からのスタートで、触って3日くらいです。
ただ、私は一応、javaについては足し算引き算できるくらいには書けますので、
つまづく所は主にAndroidならではの要素の部分でして、つまりは、画面の表示だったり画面遷移の話だったりするわけです。

#### 環境

android studio APIレベル32 (java)

# ActivityからActivityの画面遷移

そもそもActivityで画面遷移すべきかどうか、という話があるようです。~~調べていると情報が錯綜する!~~
おそらくはActivityは「シーン」で1つだけあれば良く「その中」での切り替えはFragmentを使うというのが、”たぶん”正しそうです。
ただ私がざっと調べた所「Fragmentはあくまで画面表示パーツであって画面そのものではない」理解に行きました。画面の一部を書き換えるイメージ。で、画面の大部分を置き換えればそれは実質画面の切り替えになる、とかそういう。(そして大画面のタブレットなら両方並べても良いじゃない

元記事を表示

1分で出来る最新で最小なADB環境の構築[Windows編]

# ※ わざわざAndroidStudio入れたくない人向けです

1. XDAから**15 seconds ADB Installer v1.4.3**を[ダウンロード](https://forum.xda-developers.com/t/official-tool-windows-adb-fastboot-and-drivers-15-seconds-adb-installer-v1-4-3.2588979/#post-48915118)する。
1. Googleより最新版の**Platform-Tools**を[ダウンロード](https://dl.google.com/android/repository/platform-tools-latest-windows.zip)をする。
1. **手順1**で落としたファイルを解凍後、管理者権限で実行してインストールする。
1. cmdで`adb version`を入力して確認する。
1. ↑が成功していればインストール完了。そのままだとかなり古いバージョンのツールを使うことになるので`C:\\adb\`以下に**手順2**を解凍

元記事を表示

AudioTrackでバックグラウンドでも音飛びせずに音楽をストリーミング再生する方法

# はじめに

昨年(2021)末、Androidで独自に波形生成した音楽を再生してバックグラウンド再生にも対応するアプリ(東方BGM on VGS)を作り直した際に、波形データの再生にAudioTrackを使ってみたのですが、似たようなアプリを開発する方のために参考情報として要点を記します。

「独自に波形生成した音楽を再生」するアプリを作る人は稀だと思います。というのも、私が東方VGSを最初に公開した2013年春先以来(そろそろだいたい丸9年間ぐらい?)、少なくとも私が知る範囲では類似アプリは存在しなかったので。

ですが、バックグラウンドで音楽をストリーミング再生するアプリを作っておられる方々にとっては若干有益な情報かもしれません。

> なお、アプリの公開が完了したらソースコードも全部OSSで公開しようと思っています。このアプリをコードベースにすれば、色々なVGS楽曲アプリの開発が低コストでできるので、あとは楽曲データ作成に掛かる作業コスト分をペイできる程度のシロモノであれば楽曲の版権を抑えている各社で自由にお小遣い稼ぎして頂ければ良いかな…という青写真を勝手に描いているの

元記事を表示

AndroidManifest.xml をビルド環境ごとに使い分ける(結合する)

AndroidManifest.xml は

* 主流の方 ( `src/main/AndroidManifest.xml` ) を
* 環境ごとの `AndroidManifest.xml` に結合してビルドできる

本記事では、release の buildTypes のみ下部設定値を追加する(結合する)例を記述する。

“`



“`

手元の環境

* Android Studio 2020.3.1
* gradle 7.0.3
* JDK 1.8
* Windows 11(21H2)
* Android SDK
* compile, target, min 共に 28

## (1) 環境ごとに AndroidManifest.xml を定義する

`{プロジェクト名}/app/src`

元記事を表示

RecyclerViewを反転させる方法

#はじめに
チャットなどで、最下部を最新にしたいケースがあると思います。
その際の設定を備忘録的に残しておきます。

#反転方法

反転させること自体は簡単です。
以下を対象に設定するだけで反転します。

“`
app:reverseLayout=”true”
“`

#注意点
反転させることで、0番目が最下部になります。
その為、追加読み込み時や特定のポジションに移動させる際には少々工夫が必要になります。

#さいごに
反転させる設定自体は簡単でも、取り巻く環境によっては工夫が必要になります。
この辺りの設定は慎重に行いたいところですね。
時間ができたらPagingあたりの実装も記事にしていこうと思います。

元記事を表示

【Android Studio & GitHub】Cannot load information for github.com/アカウント名が出た際の解決方法

# はじめに

皆さん、ごきげんよう!れぶです。
この記事がQiita初投稿になります。今年は特に張り切ります。

今回は、Android Studioで[Share Project On GitHub]を選択した際に出るエラーに対する解決方法を書いていきます。Android Studioで実装したコードもろもろをGitHubに載せたい人は多いと思います。実際に自分がこのエラーで躓いたので、リアルに解説していきます。

それでは参りましょう!!

# この記事の対象者

Android Studioで「Share Project On GitHub」を選択した際に、
「Cannot load information for github.com/アカウント名: Request response: Bad credentials」が出る方

# 実行環境
* Mac
* Android Studio 4.1.2

# 前提条件
* gitがパソコンにインストールされている
* Githubで発行したアクセストークンをAndroid Studioに登録済み
* そのアクセストークンをメモし

元記事を表示

Android サービスの作成 (2022年1月 記事作成)

# Android サービスとは

Android端末でバックグラウンドで動作するアプリケーションです。

# Empty Projectの作成

Android Studioの[File] – [New] – [New Project] から [Empty Activity]を選択する。ただしEmpty Project以外でももちろんOKです。


Language: Kotlin以外は適当でOKです。

# サービスとして動作するクラスの作成

Android Studioの[File] – [New] – [Kotlin Class/File]を選択する。

キャスト中や記録中にプライベート情報が公開されます

Androidで新しいアプリをインストールして設定を行っていると、以下のメッセージが表示されることがあります。

***「キャスト中や記録中にプライベート情報が公開されます」***

個人情報がネットに公開される???
ちょっと驚くというか、ビビりますよね。
しかもこのメッセージを表示しているのがAndroidなのか、そのアプリなのか、それ以外なのかも判断できないことがあります。

このメッセージを表示しているのはAndroidです。
iOSは知りませんが、Androidは自身が発するメッセージに、その発信元がAndroidであることを明記しません。
私はその仕様が大嫌い。不親切極まりない。
何度か遭遇すれば慣れますけど、初見のときは、本当にその指示に従っていいのかどうかとても悩みます。
OSのアップデートとか特にそう。

そして今回のメッセージのように、英語からの機械翻訳が下手で、元メッセージのニュアンスが欠落しているときも不安になります。

Androidの言語を英語にすると以下の表示になりました。

***”Exposing sensitive info during casti

元記事を表示

オーバースクロール効果を無効にする方法

android12からスクロールした際にポヨンというようなアニメーションをするようになりました。

こちらはデフォルトでアニメーションする為、アニメーションをさせたくない場合にどうすれば良いのかをまとめてみました。

# xmlに記載する

“`
android:overScrollMode=”never”
“`
こちらをオーバースクロール効果させたくない、スクロールするViewのxmlに記載すると無効化できます。

# プログラムで無効にする場合

“`
recyclerview.overScrollMode = View.OVER_SCROLL_NEVER
“`

# アプリ全体で無効にしたい場合

xmlと同じですが、こちらをxmlではなくstyleやtheme等にも設定することができます。

“`
android:overScrollMode=”never”
“`

# 最後に

こちらを設定するとandroid12以下の端末では、EdgeEffectが無効になります。
スクロールの端に来た時に出る半円のエフェクトです。

## 公式リファレンス

元記事を表示

OTHERカテゴリの最新記事